資料結構與演算法-插入排序
阿新 • • 發佈:2020-10-12
程式碼實現
1 //插入排序 2 public static void InsertSort(int[] arr) 3 { 4 5 for (int i = 1; i < arr.Length; i++) 6 { 7 for (int j = i; j > 0 ; j--) 8 { 9 if (arr[j]<arr[j-1]) 10 { 11ExchangeLocation(arr, j, j - 1); 12 } 13 } 14 } 15 }
待優化的地方:比較的時候如果說可以交換位置,可以存一個變數記錄交換的索引,待都比較完後才交換,然後交換位置後面的元素索引後移一個位置,這樣可以減小交換的開銷
1 //優化插入排序(位移法) 2 public static void OptimizedInsertSort(int[] arr) 3 {4 5 for (int i = 1; i < arr.Length; i++) 6 { 7 for (int j = i; j > 0; j--) 8 { 9 int changeIndex = j; 10 int original_value = arr[j];//記錄當前比較起始位置的值 11 12 if (original_value < arr[j - 1]) 13 { 14 //ExchangeLocation(arr, j, j - 1); 15 arr[j] = arr[j - 1]; 16 changeIndex = j - 1; 17 } 18 19 arr[changeIndex] = original_value; 20 21 } 22 } 23 }