关于希尔排序,这是一种不稳定,而且属于插入排序。为什么?
希尔排序=分成若干个组子序列,分别插入排序。
怎么分组?
有一个增量h,没增加h,则把它们放在一起。插入排序,直到h减少到1,此时正是简单插入排序。
看代码
#include<iostream>
using namespace std;
template <class T>
void shel(T p[],int n){
int k,j,i;
T t;
k=n/2;
while(k>0){
for(j=k;j<=n-1;j++){
t=p[j];i=j-k;
while((i>=0)&&(p[i]>t)){
p[i+k]=p[i];i=i-k;
}
p[i+k]=t;
}
k=k/2;
}
return;
}
同样的当调用函数时,只需改为shel(p+10,40);即可。
这是两种非常常见的插入法的排序应用。