一、希尔排序算法
1、基本思想:希尔排序是对直接插入排序算法的改进。希尔排序是先将整个排序数列分
割成为若干个子序列,再对子序列分别进行直接插入排序,待整个数列基本有序时,再
对全部进行一次直接插入排序。以此来形成新的有序数列。
2、相应的代码实例如下:
#include<iostream>
#include <time.h>
using namespace std;
#define ARR_MAX 10 // 假设有10个数
void shell_sort(int a[],int n)
{//希尔排序(升序)
int i,j,temp;
int d=n;
do
{
d=d/2;
for (i=d;i<=n;i++)
{
temp=a[i];
for (j=i-d;j>=0 && temp<a[j];j-=d)
{
a[j+d]=a[j];
}
a[j+d]=temp;
}
}
while(d>=1);
}
void print_arry(int a[], int len)
{
for(int i=0;i<len;i++)//循环打印数组的每个元素
{
cout<<a[i]<<" ";
}
cout<<endl;
}
int main()
{
srand((unsigned)time(NULL)); // 随机种子
int t[ARR_MAX];
cout<<"排序前:";
for (int i=0;i<ARR_MAX;i++)
{
t[i]=rand()%1000+1; // 随机数为1~1000
cout<<t[i]<<" ";
}
cout<<endl;
shell_sort(t,ARR_MAX);
cout<<"排序后:";
print_arry(t,ARR_MAX);
return 0;
}
3、运行效果如下: