一.算法简介
希尔排序其实就是插入排序的一种更加高效的改进的版本,是属于不稳定排序的一种
二.算法实现过程
1) 进行分组,组距为数据数量n/2
2) 每组都进行直接插入排序
3)重复1),2),直到组距小于等于0,每次组距都会除以2
一样的,上图
颜色相同的为同一组
接下来展示代码
//时间复杂度为nlog2n
#include <iostream>
using namespace std;
void Shell_Sort(int a[],int n);
int main(){
int n;
cin >> n;
int a[1000];
for(int i=0;i<n;i++) cin >> a[i];
Shell_Sort(a,n);
for(int i=0;i<n;i++) cout << a[i]<< " ";
system("pause");
return 0;
}
void Shell_Sort(int a[],int n){
int gap;//组距
int i,j;
//进行分组,每一次组距除以2
for(gap=n/2;gap>0;gap/=2){
//对分好的组数进行直接插入排序
for(i=0;i<gap;i++){
for(j=i+gap;j<n;j+=gap){
if(a[j]<a[j-gap]){
int k=a[j];
int x=j-gap;
while(x>=0&&a[x]>k){
a[x+gap]=a[x];
x-=gap;
}
a[x+gap]=k;
}
}
}
}
}
其实大概就是在插入排序之前加了一个分组的操作,有不懂的再问吧,希望对大家有帮助