#include<iostream>
using namespace std;
inline void swap(int &a,int &b)
{
int tmp=a;
a=b;
b=tmp;
}
void shellSort(int a[],int n)
{
for(int step=5;step>=1;step-=2)//步长取5,3,1
{
for(int begin=0;begin!=step;begin++)//begin为子序列第一个元素
{
//直接插入排序
int cur=begin,next=cur+step;
while(cur<n && next<n)
{
int lhs=cur,rhs=next;
while(lhs>=begin && a[lhs]>a[rhs])
{
swap(a[lhs],a[rhs]);
lhs-=step;
rhs-=step;
}
cur+=step;
next+=step;
}
}
}
}
int main()
{
int a[]={23,123,-2,0,98,1,4,6,8,55,-2,};
int len=(sizeof(a)/sizeof(*a));
shellSort(a,len);
for(int i=0;i!=len;i++)
{
cout<<a[i]<<endl;
}
return 0;
}
希尔排序
最新推荐文章于 2024-06-04 00:42:18 发布