希尔排序(Shell's Sort)的C语言实现


原创文章,转载请注明来自钢铁侠Mac博客http://www.cnblogs.com/gangtiexia

希尔排序(Shell's Sort)又称“缩小增量排序”(Diminishing Increment Sort)的基本思想不断缩小步长后分组排序,具体步骤为
 
演示实例:
 
 
 
C语言实现(编译器Dev-c++5.4.0,源代码后缀.cpp)
 
 1 #include <stdio.h>
 2 #define LEN 9
 3 
 4 typedef float keyType;
 5 
 6 typedef struct{
 7     keyType score;
 8     char name[20];
 9 }student;
10 
11 typedef struct{
12     int length=LEN;
13     student stu[LEN];
14 }sqList;
15 
16 void shellInsert(sqList &L,int step){
17     for(int k=1;k<=step&&k<L.length;k++)
18         {    
19             
20             for(int i=k+step;i<L.length;i+=step){
21                 L.stu[0]=L.stu[i];
22                 int j;
23                 for(j=i-step;L.stu[j].score<L.stu[0].score&&j>0&&(j+step)<L.length;j=j-step)
24                         {
25                             L.stu[j+step]=L.stu[j];
26                         }
27                 L.stu[j+step]=L.stu[0];
28             }    
29         }
30 
31 }
32 
33 void shellSort(sqList &L){
34     int delta[5]={7,6,5,3,1};
35     for(int k=0;k<5;k++){
36         shellInsert(L,delta[k]);
37     }
38 }
39 
40 int main(){
41     sqList L;
42 
43     for(int i=1;i<L.length;i++){
44         printf("
请输入第%d个学生的姓名:",i);
45         gets(L.stu[i].name);
46         printf("分数:");
47         scanf("%f",&(L.stu[i].score));
48         getchar();
49     }    
50     
51     shellSort(L);
52     
53     for(int i=1;i<L.length;i++){
54         printf("
学生%s 分数%f 第%d名",L.stu[i].name,L.stu[i].score,i);
55     }
56     return 1;
57 }
原文地址:https://www.cnblogs.com/gangtiexia/p/5097195.html