直接插入排序算法(用於理解)
一個帶排序數組 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--)
要熟記直接插入排序算法,因為其他插入排序也也會用到直接插入排序