排序算法---插入排序

1.直接插入排序

复制代码
 1 void insetSort(int *arr, int n)
 2 {
 3     int i, j, k;
 4     
 5     for(i = 1; i < n; i++)
 6     {
 7         for(j = i - 1; j >= 0; j--)
 8         {
 9             if(arr[j] < arr[i])
10             {
11                 break;
12             }
13         }
14         
15         if(j != i - 1)
16         {
17             int temp = arr[i];
18             
19             for(k = i - 1; k > j; k--)
20             {
21                 arr[k + 1] = arr[k];
22             }
23             
24             arr[k + 1] = temp;
25         }
26     }
27 }
复制代码

 

2.希尔排序

复制代码
 1 void insetSort(int *arr, int n, int dk)
 2 {
 3     int i, j, k;
 4     
 5     for(i = dk; i < n; i++)
 6     {
 7         for(j = i - dk; j >= 0; j -= dk)
 8         {
 9             if(arr[j] < arr[i])
10             {
11                 break;
12             }
13         }
14         
15         if(j != i - dk)
16         {
17             int temp = arr[i];
18             
19             for(k = i - dk; k > j; k -= dk)
20             {
21                 arr[k + dk] = arr[k];
22             }
23             
24             arr[k + dk] = temp;
25         }
26     }
27 }
28 
29 void shellSort(int *arr, int n)
30 {
31     int dk = 0;
32     
33     dk = n >> 1;
34     while(dk >= 1)
35     {
36         insetSort(arr, n, dk);
37         dk = dk >> 1;
38     }
39 
40 }
复制代码

  当希尔排序的步长为1时,就等同于直接插入排序。

 

posted @   Yong_无止境  阅读(138)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示