王道课程中咸鱼老师说的一种实现方式,非课本中的
#include<bits/stdc++.h>
using namespace std;
void ShellSort(int *a,int n)
{
for(int d=n/2;d>=1;d=d/2) //增量d为一组
{
for(int i=0;i<d;i++)//进行d轮插入排序 a[i]为每组第一个元素
{
for(int j=i+d;j<n;j=j+d)//从第二个元素开始进行插入排序
{
int temp=a[j];//暂存元素
int k;
for( k=j-d;k>=0;k=k-d)//从后往前寻找插入位置
{
if(temp<a[k]) a[k+d]=a[k];
else break;
}
a[k+d]=temp;
}
}
}
}
int main()
{
for(int i=0;i<10;i++) cout<<i<<" ";
cout<<endl;
int a[]={9,8,7,6,5,4,3,2,1,0};
for(int i=0;i<10;i++) cout<<a[i]<<" ";
cout<<endl;
ShellSort(a,10);
for(int i=0;i<10;i++) cout<<a[i]<<" ";
cout<<endl;
}