【算法和数据结构】排序(三)插入排序(C++实现)
2016-12-13 23:34
417 查看
【算法和数据结构】1.2.3–排序算法之插入排序(C++实现)
总述:插入排序(Insertion Sort)作为一种简单的排序算法,应用非常广泛。下面就以从小到大排序某序列为例,介绍其基本原理:1.原理概述:插入排序,顾明思议就是将某个记录插入到某一序列的某个位置中,从而得到一个有序的序列。其基本思想是:每步将一个待排序的纪录,按其码值的大小插入前面已经排序的序列中适当位置上,直到全部插入完为止。
2.具体操作:
(1)假设待排序序列已经存放在数组array
中,即该序列长度为n。下面以从小到大排序为例:
(2)做(n-1)次循环操作,依次插入第i个元素;
(4)插入第i个元素,即以array[i]为起点,依次往前(即下标减小的方向)扫描,若array[j-1]>array[j],则交换两个元素的位置。下图展现了插入某一个元素的过程:
(5)依此类推,直至插入最后一个元素。下图展现了一个完整的插入排序过程:
3.代码实现(C++):
void swapValues(int arrayName[], int i, int j); //swap the values of arrayName[i] and arrayName[j] void insertionSort(int arrayName[], int low, int high); //to sort "arrayName" between low and high void swapValues(int arrayName[], int i, int j) { int middleVariable = 0; middleVariable = arrayName[i]; arrayName[i] = arrayName[j]; arrayName[j] = middleVariable; } void insertionSort(int arrayName[], int low, int high) { int length=high-low+1; for (int i = 1;i < length;i++) //insert the number i record for (int j = i;(j>0) && (arrayName[j] < arrayName[j - 1]);j--) swapValues(arrayName, j, j - 1); }
4.分析:
(1)理解插入排序关键在于理解其基本思想–将一个元素插入一个排好序的序列中的合适位置;
(2)平均时间复杂度为θ(n^2);
(3)插入排序是稳定(Stable)的排序算法。
5.算法包
点击这里下载排序算法源代码,包括:插入排序、选择排序、冒泡排序、快速排序、归并排序、0交换排序等多种算法,以整数序列为例实现。
相关文章推荐
- 算法和数据结构-选择排序、插入排序及希尔排序 java实现
- 数据结构与算法——三种基础排序算法C#实现(冒泡排序、选择排序、插入排序)
- 【算法和数据结构】排序(二)选择排序(C++实现)
- 数据结构与算法:C++实现快速排序
- 算法与数据结构基础 -- 排序 (C++实现)
- 【算法和数据结构】排序(四)归并排序和快速排序(C++实现)
- 经典算法与数据结构的c++实现——直接选择排序
- 经典算法与数据结构的c++实现——插入排序
- 数据结构---快速排序---java与c++实现
- 【数据结构】非比较排序的算法实现(包括计数排序、计数排序)
- scala数据结构和算法-05-插入排序实现
- 必须知道的八大种排序算法【java实现】(二) 选择排序,插入排序,希尔算法【详解】
- 用C++的基本算法实现十个数排序
- 算法 排序 python 实现--插入排序
- 一步步学习数据结构和算法之选择排序效率分析及java实现
- 必须知道的八大种排序算法【java实现】(二) 选择排序,插入排序,希尔算法【详解】
- 算法与数据结构课程中的c++实现的顺序表和链表
- 算法与数据结构基础1:C++实现动态数组
- 笔试算法题(55):快速排序实现之三路划分, 三元中值法和插入排序处理小子文件
- 算法 (排序乐园Lv-2) 插入排序代码实现