算法实现:
void sort::shell_sort(int* a, const int n)
{
?int h = 0;
?while (h? h = 3*h + 1;
?while(h>=1)
?{
? for(int i=h; i? {
? ?for(int j=i; j>=h && a[j] < a[j-h]; j = j-h)
? ?{
? ? swap(a,j,j-h);
? ?}
? }
? h = h/3;
?}
}
算法分析:从上述算法的实现过程中可以看出,希尔排序主要是先将数组分成若干个小的数组组成,然后对这些小的数组依次进行插入排序,经过这番排序之后,整个数组将会存在多个局部有序的子序列,这样的数组再使用(h=1时)插入排序,将会很快的完成数组的排序。