**
希尔排序 C++**
这里就不讲原理了,原理大家都懂,就是不会敲代码 //泪目了//
#include#include using namespace std; #define Max 500 void ShellSort(int R[],int N,int d[],int t); void Print(int R[],int N); int main() { int *R,N,i,*d,t; cin>>N; R=new int[N+1]; for(i=1; i<=N; i++) cin>>R[i]; Print(R,N); cin>>t; d=new int[t]; for(i=0; i >d[i]; ShellSort(R,N,d,t); Print(R,N); return 0; } void Print(int R[],int N) { int i; cout< for(int i=0;i //d[i]为增量 for(int j=1;j<=d[i];j++)//增量为几就有几个序列 { for(int k=j;k<=N-d[i];k+=d[i]){//分好了每个序列,现在要用直接排序 //从后往前移动 主要是要想清楚分组的边界 int end=k;//最后的那个数 int tmp=R[end+d[i]];//待插入的数 while(end>=1){//数组从1开始放 if(tmp //交换 R[end+d[i]]=R[end]; end-=d[i]; }else break; } R[end+d[i]]=tmp; } } Print(R,N); } }
如果看不懂中间两个循环的话,建议去补一下插入排序
记录一下做题,如果有更好的建议欢迎提出来呀!



