3.希尔排序
希尔排序就是对插入排序的优化,来解决插入排序有时候解决不了的问题;希尔排序与插入排序的区别就是要分组,例如a[10]={23,56,34,10,80,65,38,24,23,59};共有10个数,就需要对其进行折半分组,每次循环进行一次折半分组,直至折半分组为1个数一组。分组完就进行排序,后面类似插入排序,只不过以折半分组的组数为间隔进行比较;
实现代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=10;
void ShellSort(int a[],int n){
for (int step = n / 2; step > 0; step /= 2) {//进行分组,一个数组有几个数对半分;
for (int i = step; i < n; i++) {
int j = i;//j暂存要准备向前排序的元素下标;
int temp = a[j];//temp暂存向前排序的元素的值;
while (j - step >= 0 && a[j - step] > temp) {
a[j] = a[j - step];//类似插入排序,将a[j-step]向后移step位至a[j];
j = j - step;//以step为间隔,所以进行j=j-step,寻找到属于这一组的下一个元素值;
}
a[j] = temp;//将暂存元素的值换到当前插入的位置j上,当前j为插入的位置了。
}
}
}
int main(){
int a[maxn]={23,56,34,10,80,65,38,24,23,59};
ShellSort(a,maxn);
for(int i=0;i<maxn;i++){
cout<<a[i]<<" ";
}
return 0;
}
可以先把插入排序搞懂再来看希尔排序。