数据结构
(1)抽象数据类型——顺序表
(2)数据对象——自定义抽象数据对象
(3)关键排序元素属性——可以比较大小的元素
补充一点,希尔排序最重要的就是增量序列,其中不同年代有不同的版本。
例下:
增量序列不固定,就算序列增量只有1,也可以。希尔排序不常用,时间复杂度比较优良,但是和增量序列有关,各位看官自行选择。
#include<bits/stdc++.h>
using namespace std;
#define MAXSIZE 30
typedef struct {
int key;
char *otherinfo;
}ElemType;
typedef struct{
ElemType *r;
int length;
}SqList;
void ShellInsert(SqList &L,int dk)
{
for(int i=dk+1;i<=L.length;i+=dk)
{
if(L.r[i].key<L.r[i-dk].key)
{
int j;
L.r[0]=L.r[i];//哨兵
for(j=i-dk;j>0&&L.r[0].key<L.r[j].key;j-=dk)
L.r[j+dk]=L.r[j];
//向后挪动位置
L.r[j+dk]=L.r[0];
}
}
}
void Shellsort(SqList &L,int dt[],int t)//增量数组
{
int k;for(k=0;k<t;k++){
int x=dt[k];
ShellInsert(L,x);
}
}int main()
{
int n;
cout<<"请输入要排序的个数:";
cin>>n;
SqList L;
L.r=new ElemType[MAXSIZE];
L.length=n;
//记得要处理一下
for(int i=1;i<=n;i++)
cin>>L.r[i].key;
int dt[4]={1};
Shellsort(L,dt,1);
cout<<"\n输出希尔排序后的序列:";
for(int i=1;i<=n;i++)
cout<<L.r[i].key<<' ';
return 0;
}