代码实现
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 }