/*
Copyright (c)2016,烟台大学计算机与控制工程学院
All rights reserved.
文件名称:项目二之希尔排序.cpp
作 者:李潇
完成日期:2016年12月18日
版 本 号:v1.0
问题描述:请用希尔排序算法完成序列{57,40,38,11,13,34,48,75,6,19,9,7}的排序。
输入描述:无
程序输出: 排序前、排序中、排序后的数组。
*/
代码:
#include <stdio.h>
typedef int KeyType;
typedef int InfoType;
#define num 12
typedef struct
{
KeyType key;
InfoType data;
}RecType;
void ShellSort(RecType R[],int n)
{
int i,j,k,gap;
RecType tmp;
gap=n/2;
while(gap>0)
{
for(i=gap;i<n;i++)
{
tmp=R[i];
j=i-gap;
while(j>=0 && tmp.key<R[j].key)
{
R[j+gap]=R[j];
j=j-gap;
}
R[j+gap]=tmp;
}
//printf("输出希尔排序的过程:\n");
printf("gap=%d: ",gap);
for (k=0; k<n; k++)
printf("%d ",R[k].key);
printf("\n");
gap=gap/2;
}
printf("输出希尔排序后的数组:\n");
for(i=0;i<n;i++)
{
printf("%d ",R[i].key);
}
printf("\n");
}
int main()
{
int i;
RecType r[num];
KeyType a[]={57,40,38,11,13,34,48,75,6,19,9,7};
for(i=0;i<num;i++)
r[i].key=a[i];
printf("输出排序前的数组:\n");
for(i=0;i<num;i++)
printf("%d ",r[i].key);
printf("\n");
ShellSort(r,num);
return 0;
}
运行结果: