#include <iostream>
using namespace std;
/**
* 希尔排序
* 希尔排序是插入排序的的改进
* 改进的主要思想是:
* 1.插入排序对于小规模数组效率较高
* 2.插入排序对于部分有序数组排序效率高
* 希尔排序的性能取决于递增序列,和h有关。
* 希尔排序也可适用于大数组,希尔排序要比选择排序和插入排序快得多,数组越大,优势越大。
* 最坏的情况下,希尔排序的比较时间和N^(3/2)成正比
* TIPS:
* 使用该Demo中的递增序列的比较次数不会超过size的若干倍乘以递增序列的长度。
* @param a
* @param size
* @return
*/
int shellInsertion(int a[],int size){
int h = 1; //h有序
//使用序列(3^k-1)/2,称之为递增序列。
while(h < size/3) h = h*3 + 1;
while(h>=1){
for(int i = h;i < size;i++){
for(int j = i;j >= h && (a[j] < a[j-h]);j-=h){
int temp = a[j];
a[j] = a[j-h];
a[j-h] = temp;
}
}
h = h/3;
}
}
int main() {
int a[] = {99,90,78,56,45,34,23,11,1};
shellInsertion(a,sizeof(a)/sizeof(a[0]));
for(int i = 0;i < sizeof(a)/sizeof(a[0]);i++){
cout<<a[i]<<" ";
}
return 0;
}
标签:int,插入排序,希尔,sizeof,排序,size
From: https://www.cnblogs.com/poteitoutou/p/17093745.html