当先锋百科网

首页 1 2 3 4 5 6 7

希尔排序法的思想是:先取一个小于数组长度n的数d1作为第一个增量,把数组里面的n个数分成d1个组,数组中所有距离为d1的数都放在同一个小组中,分组过程见下图,再在各组里进行直接插入排序,然后取第二个增量d2<d1,重复上面的分组与排序,直至夺取的增量dt=1(dt<....<d2<d1)即所有的数放入同一组中进行直插排序为止。

整体程序如下:

#include<iostream>
using namespace std;
void Shell_pass1(int a[],int d);
void Shell_sort(int a[]);
void Shell_pass1(int a[],int d)
{//希尔排序中的一趟排序,d为当前增量
       int i,temp,j;
       for(i=d;i<7;i++)
       if(a[i]<a[i-d])//将R[d..n]分别插入各组当前的有序区
        {
               temp=a[i];
               j=i-d;
              do{
                     a[j+d]=a[j];
                     j=j-d;//查找前一记录
                  } while(j>0&&temp<a[j]);
            a[j+d]=temp;
         }
}
void Shell_sort(int a[])
{
         int increase=7;//增量初值
         do
        {
               increase=increase/3+1;//求下一增量
               Shell_pass1(a,increase);//一趟增量为increment的Shell插入排序
         } while (increase>1);
 }
int main()
{
    int i,a[100];
    cout<<"Please input 7 numbers: ";
    for (i=0;i<7;i++)
        cin>>a[i];
    cout<<"The result of resort: ";
    Shell_sort(a);
    for (i=0;i<7;i++)
       cout<<a[i]<<' ';
}