希尔排序

给你10个指定的数字12,2,16,30,28,10,16,20,6,18,用希尔排序的方法把这十个数从小到大的排列

定义一个顺序表,对顺序表进行初始化赋值存入这十个数字,然后用希尔排序进行排序。希尔排序就是把这十个数每隔n个数的两个数分为一组,

n为变量,可以存在一个数组中,最后一个变量为1,这样把这十个数就分成了五个小组,然后在对每个组进行插入排序。

#include <iostream>
using namespace std;
#include "Sort.h"
int main()
{

   SqList S;
    int dt[]={5,3,1};
    cout<<"排序前:"<<endl;

 InitList(&S);
    PrintList(&S);
    cout<<"希尔排序:"<<endl;
    ShellSort(&S,dt,3);
    PrintList(&S);
    return 0;
}

#ifndef SORT_H_INCLUDED
#define SORT_H_INCLUDED
#define maxsize 100


typedef struct{
    int key;
    char otherinfo;
}Elemtype;


typedef struct SqNode{
    Elemtype *data;
    int length;
}SqList;


void InitList(SqList *S){ //初始化
    S->data=new Elemtype[maxsize+1];
    S->length=10;
    S->data[1].key=12;
    S->data[2].key=2;
    S->data[3].key=16;
    S->data[4].key=30;
    S->data[5].key=28;
    S->data[6].key=10;
    S->data[7].key=16;
    S->data[8].key=20;
    S->data[9].key=6;
    S->data[10].key=18;


}

void ShellInsert(SqList *S,int dk){
    int i,j;
    for( i=dk+1;i<=S->length;++i)
    if(S->data[i].key<S->data[i-dk].key){
        S->data[0].key=S->data[i].key;
        for( j=i-dk;j>0 && S->data[0].key<S->data[j].key;j-=dk)
            S->data[j+dk].key=S->data[j].key;
        S->data[j+dk].key=S->data[0].key;
    }
}


void ShellSort(SqList *S,int dt[],int t){   //希尔排序


    for(int k=0;k<t;k++)
    {


        ShellInsert(S,dt[k]);


    }


}
void PrintList(SqList *S)
{
    int i;
    for(i=1;i<=S->length;i++)
        cout<<S->data[i].key<<" ";
    cout<<endl;
}




#endif // SORT_H_INCLUDED

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值