您的位置:首页 > 运维架构 > Shell

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

2016-01-03 21:17 791 查看
原创文章,转载请注明来自钢铁侠Mac博客http://www.cnblogs.com/gangtiexia

希尔排序(Shell's Sort)又称“缩小增量排序”(Diminishing Increment Sort)的基本思想不断缩小步长后分组排序,具体步骤为

演示实例:



C语言实现(编译器Dev-c++5.4.0,源代码后缀.cpp)

#include <stdio.h>
#define LEN 9

typedef float keyType;

typedef struct{
keyType score;
char name[20];
}student;

typedef struct{
int length=LEN;
student stu[LEN];
}sqList;

void shellInsert(sqList &L,int step){
for(int k=1;k<=step&&k<L.length;k++)
{

for(int i=k+step;i<L.length;i+=step){
L.stu[0]=L.stu[i];
int j;
for(j=i-step;L.stu[j].score<L.stu[0].score&&j>0&&(j+step)<L.length;j=j-step)
{
L.stu[j+step]=L.stu[j];
}
L.stu[j+step]=L.stu[0];
}
}

}

void shellSort(sqList &L){
int delta[5]={7,6,5,3,1};
for(int k=0;k<5;k++){
shellInsert(L,delta[k]);
}
}

int main(){
sqList L;

for(int i=1;i<L.length;i++){
printf("\n请输入第%d个学生的姓名:",i);
gets(L.stu[i].name);
printf("分数:");
scanf("%f",&(L.stu[i].score));
getchar();
}

shellSort(L);

for(int i=1;i<L.length;i++){
printf("\n学生%s 分数%f 第%d名",L.stu[i].name,L.stu[i].score,i);
}
return 1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: