标签:
先看懂直接插入排序再看这个
#include<cstdlib>
#include<cstdio>
#include<cstring>
#define MAXSIZE 10
typedef struct{
int r[MAXSIZE+1];
int length;
}SqList;
//就是将基本有序的序列在继续有序(类似直接插入)达到完全有序
//不懂,详见《大话数据结构》程杰 392页
void ShellSort(SqList *L){
int i,j;
int increment = L->length;
do{
increment = increment/3+1; //增量序列 确实不好理解
for(i=increment+1;i<=L->length;i++){
if(L->r[i]<L->r[i-increment]){
L->r[0] = L->r[i];
for(j=i-increment;j>0&&L->r[0]<L->r[j];j-=increment)
L->r[j+increment] = L->r[j];
L->r[j+increment] = L->r[0];
}
}
}while(increment>1);
return;
}
void Assignment(SqList *L,int len,int *a){
int i;
L->length = len;
for(i=1;i<=len;i++){
L->r[i] = a[i-1];
}
return ;
}
void Output(SqList L){
int i;
for(i=1;i<=L.length;i++){
printf("%d ",L.r[i]);
}
printf("\n");
return;
}
int main(){
int a[10] = {9,1,5,8,3,7,4,6,2,10};
SqList L;
Assignment(&L,10,a);
ShellSort(&L);
Output(L);
return 0;
}
标签:
原文地址:http://www.cnblogs.com/zhuozhuo/p/5450188.html