算法之插入排序(inertionSort)
插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,适用于少量数据的排序,时间复杂度为O(n^2)。
插入排序属于稳定排序。
插入排序不需要构造新的数据序列,而是在原有的数据序列中进行排序运算。
1 void insertionSort(int* array, int length) 2 { 3 int i = 0; 4 int j = 0; 5 int key = 0; 6 7 for(i = 1; i < length; i++) 8 { 9 key = array[i]; 10 j = i - 1; 11 while((j >= 0) && (array[j] > key)) 12 { 13 array[j + 1] = array[j]; 14 j--; 15 } 16 array[j + 1] = key; 17 } 18 }
ps:需要注意第10行循环条件之一 j >= 0 这和《算法导论》中的伪代码有所不同,是因为《算法导论》中数据序列的下标从1开始,如果要保持一致,可将第 10~15行的代码改为:
10 j = i;
11 while((j > 0) && (array[j - 1] > key))
12 {
13 array[j] = array[j - 1];
14 j--;
15 }
16 array[j] = key;
whatever is worth doing is worth doing well...