标签:
算法描述:
相对于直接插入排序,希尔排序将数组元素按下标的一定增量分组,对每组进行直接插入排序,随着增量的不断减小,每组包含的元素也就越多,当增量为1时,整个数组被分为一个组,进行直接插入排序之后结束。
下面给出随机整数数组的希尔排序C++实现:
#include <iostream> #include <math.h> using namespace std; const int Num=20; void exch(int* s,int a,int b) { int mid=s[a]; s[a]=s[b]; s[b]=mid; } int main() { int array[Num]; srand(3);//初始化随机数 for(int i=0;i<Num;i++)//初始化数组0到100之间 { array[i]=rand() % 101; } for(int i=0;i<Num;i++)//输出原数组 { printf("%d ",array[i]); } int step=1; while(step<Num/3) { step=step*3+1; } while(step>=1)//希尔排序 { for(int i=step;i<Num;i++) { for(int j=i;j>=step;j-=step) { if(array[j]<array[j-step]) exch(array,j,j-step); } } step/=3; } printf("\n"); for(int i=0;i<Num;i++) { printf("%d ",array[i]); } return 0; }
希尔排序的更高效的原因是它权衡了子数组的规模和有序性。排序之初,个子数组都很短,排序之后每个子数组都是部分有序的,这两个情况都很适合插入排序。
标签:
原文地址:http://blog.csdn.net/u014594922/article/details/51362922