直接插入排序算法(用于理解)
一个带排序数组 array[] 元素个数 size = array.length
两个指针表示元素位置 int i 和 int j
i 表示待排序元素的位置 , j 和 i 相等,为了表示已经排好序的元素位置
快树排序就是把一个待排元素排进已排好的队列中,因此需要两层循环
第一层循环 for( i = 1;i < size;i++) i 表示待排元素的位置,从第二个元素开始所以 i 初始化为1
循环内部设置 int temp = array[i] ;
再设置 j = i; 因为这层循环每完成一次,已经排好序的元素就多一个。(为什么j=i 而不是 j = i-1 ,也可以那么赋值,看个人喜好。主要就是表述已经排序好的最后一个元素的位置)
第二层循环为找到插入位置 while( j-1 >= 0 && array[j-1] > temp) 表示如果前面还有比 temp 小的元素就继续循环
循环内部开始排序 array[j] = array[j-1]; 将比 temp 大的那个元素与 temp 交换
前面还有元素 j -- ; 前面还有没比较的元素
到此算法完成
void InsertSort(T* array, int n) { int i, j; T temp; / for (i = 1; i < n; i++) { //待排序元素位置 j = i; temp = array[i]; while (j-1 >= 0 && temp < array[j - 1]) { //寻找插入位置 array[j] = array[j - 1]; j--; } array[j] = temp; //也可以写在第二层循环内部。但可以分离出来,也算是提高计算性能。 }
总的来说就是 i 记录待排序的元素位置(第一层循环i++),需要将待排序元素与前一个元素比较,若i前还有比它小的元素则继续比较(第二层循环 j--)
要熟记直接插入排序算法,因为其他插入排序也也会用到直接插入排序
来源:https://www.cnblogs.com/yinniora/p/11958543.html