标签:
先看懂直接插入排序再看这个
#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