希尔排序

 1 /* 希尔排序 */
 2 
 3 #include<stdio.h>
 4 #include<stdlib.h>
 5 
 6 void show(int *p,int length)
 7 {
 8     printf("\n");
 9     for (int i=0;i<length;i++)
10     {
11         printf("%4d",p[i]);
12     }
13 }
14 
15 void shellsort(int *p,int length)
16 {
17     int d = length/2;// 增量
18     while (d>=1)// 增量终止的条件
19     {
20         for (int i=d;d<length && i<length;i++)// i循环最后的位置
21         {
22             int x=p[i];// 备份
23             int j=i-d;// 前面一个元素
24             while (j>=0 && p[j]>x)// 保证在数组的范围内  找到插入的位置
25             {
26                 p[j+d]=p[j];
27                 j=j-d;// 每次折半
28             }
29 
30             p[j+d]=x;// 交换
31         }
32 
33         d/=2;// d--  也可以,增量可以自由设定
34     }
35 
36 }
37 
38 void main()
39 {
40     int a[8] = {1,8,2,7,3,4,5};
41 
42 
43     show(a,8);
44 
45     shellsort(a,8);
46 
47     show(a,8);
48 
49 
50 
51     system("pause");
52 }

 

posted on 2015-06-24 14:40  Dragon-wuxl  阅读(196)  评论(0)    收藏  举报

导航