1. 程式人生 > 其它 >C筆記 - 演算法:插入排序

C筆記 - 演算法:插入排序

插入排序

1 - 插入排序(Insertion-Sort)是一種簡單直觀的排序演算法,它的工作原理是通過構建有序序列,對未排序資料在已排序序列中從後向前掃描,找到相應位置並插入(不明白的話就想想打撲克時如何整理的順子,對,就是插入排序)

2 - 具體演算法描述

① 從第一個元素開始,該元素可以認為已經被排序

② 取出下一個元素,在已經排序的元素序列中從後向前掃描

③ 如果該元素(已排序)大於新元素,將該元素移到下一位置

④ 重複步驟 3,直到找到已排序的元素小於或者等於新元素的位置

⑤ 將新元素插入到該位置後

⑥ 重複步驟 2 - 5,最終完成排序

3 - 程式碼示例 

 1     // 陣列
2 int array[] = {12,91,21,10,13,88,66}; 3 int length = sizeof(array)/sizeof(array[0]); 4 5 // 記錄前一個元素索引 6 int preIndex = 0; 7 // 記錄當前需要排列的元素 8 int currentNumber = 0; 9 10 // 外層控制輪數,共需 length - 1 次 11 // 從 1 開始,能姣好地記錄陣列的首個元素 array[0] 12 for (int i = 1; i < length; i ++) {
13 14 preIndex = i - 1; 15 currentNumber = array[i]; 16 17 // 內層排序:如果前一個元素比需要排列的元素大,那麼就把 currentNumber 不斷的向前移動 18 for (; preIndex >= 0 && array[preIndex] > currentNumber; preIndex--) { 19 array[preIndex + 1] = array[preIndex]; 20
} 21 22 // 注意:插入的索引是 preIndex +1 23 array[preIndex + 1] = currentNumber; 24 25 26 printf("-------第 %d 輪排序------\n\n",i); 27 for (int i = 0; i < length -1; i ++) { 28 printf("%d ",array[i]); 29 } 30 31 if (length == 6) { 32 printf("\n\n"); 33 return 1; 34 } 35 printf("\n\n"); 36 37 }

日誌列印