码迷,mamicode.com
首页 > 其他好文 > 详细

希尔排序

时间:2014-09-26 23:03:18      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   使用   for   文件   sp   div   

#include<stdio.h>
#define MAXSIZE 100   //假设文件长度,即待排序的记录数目
typedef int KeyType;
typedef struct{
    KeyType key;
}RcdType;
typedef struct{
    RcdType R[MAXSIZE+1];//存储待排序记录的一维数组,R或作为[0]闲置或作为“哨兵使用
    int length;
}SortSqlist;
//关键字类型为KeyType自己定义
void ShellPass(SortSqlist &L,int d){
    int i,j;
    for(i=d+1;i<=L.length;i++)  
        if(L.R[i].key<L.R[i-d].key){
         L.R[0]=L.R[i];j=i-d;// L.R[0]只是暂存单元,不是哨兵
         do{
             L.R[j+d]=L.R[j];//后移记录
             j=j-d;//查找前一记录
         }while(j>0&&L.R[0].key<L.R[j].key);
         L.R[j+d]=L.R[0];//插入L.R[i]到正确位置上
      }
}
void ShellSort(SortSqlist &L,int d[],int k){
    //对顺序表L进行希尔排序,d[0]~d[k-1]是值递减的增量序列,且d[k-1]=1;
    int i=0;
    for(i=0;i<k;i++)ShellPass(L,d[i]);
}
int main(){
 int i,d[]={5,3,1},k=3;
 SortSqlist L;
 printf("输入排序的个数");
 scanf("%d",&L.length);
 for(i=1;i<=L.length;++i)
   scanf("%d",&L.R[i].key);
 ShellSort(L,d,k);
 for(i=1;i<=L.length;i++)
    printf("%d ",L.R[i].key);
 return 0;
}

 

希尔排序

标签:style   blog   color   io   使用   for   文件   sp   div   

原文地址:http://www.cnblogs.com/leijiangtao/p/3995479.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!