1. 程式人生 > 實用技巧 >資料結構與演算法-插入排序

資料結構與演算法-插入排序

程式碼實現

 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                     {
11
ExchangeLocation(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 }