插入排序 插入排序算法是所有排序方法中最简单的一种算法,其主要的实现思想是将数据按照一定的顺序一个一个的插入到有序的表中,最终得到的序列就是已经排序好的数据。
直接插入排序是插入排序算法中的一种,采用的方法是:在添加新的记录时,使用顺序查找的方式找到其要插入的位置,然后将新记录插入。 很多初学者所说的插入排序,实际上指的就是直接插入排序算法,插入排序算法还包括折半插入排序、2-路插入排序,表插入排序和希尔排序等,后序文章都会一一讲到。
想象我们打扑克摸排的时候每摸到一张牌时我们都会按照该牌面的大小插入到合适的位置。
例如采用直接插入排序算法将无序表{3,1,7,5,2,4,9,6}进行升序排序的过程为:
// 参数arr是待排序数组的首地址,len是数组元素的个数。 void insertsort(int *arr,unsigned int len) { int tmp; for (int i = 1; i < len; ++i) { tmp = arr[i]; int j; for ( j = i - 1 ; (j>=0&&arr[j]>tmp); j--) { arr[j+1] = arr[j]; } arr[j+1] = tmp; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 插入排序的不足,与优化 不足:
寻找插入位置; 移动元素 优化方案:
对已排好的序列,采用二分查找方法; 携带多个元素 数据链表化; 希尔排序