数据结构与算法-插入排序

代码实现

 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         }

 

 

 

posted on 2020-10-12 14:28  雯烈  阅读(158)  评论(0编辑  收藏  举报