给你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