#include<iostream>
using namespace std;
#define SIZE 21
typedef int Sqlist[SIZE];
void ShellInsert(Sqlist &L,int dk,int n)
{
int i,j;
for(i=dk;i<n;++i)
{
if(L[i]<L[i-dk])
{
L[0] = L[i];
for(j=i-dk;j>0 && L[0]<L[j];j-=dk)
{
L[j+dk] = L[j];
}
L[j+dk] = L[0];
}
}
}
void ShellSort(Sqlist &L,int dlta[],int t,int n)
{
for(int k=0;k<t;++k)
ShellInsert(L,dlta[k],n);
}
void main()
{
Sqlist L= {0,49,38,65,97,76,13,27};
int dlta[]={5,3,1};
ShellSort(L,dlta,3,8);
for(int i=1;i<8;++i)
cout<<L[i]<<" ";
cout<<endl;
}
分析:希尔排序利用到了:
1.直接插入排序记录较少时,直接插入效率可以大大提高。
2.直接插入排序算法简单,n值很小的时候效率高。