【算法】希尔排序算法Shell Sort
原理
基本思想:希尔排序是把序列按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量的逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个序列恰好被分为一组,算法便终止。
代码
#include <bits/stdc++.h>
using namespace std;
void print_sort(int arr[],int n)
{
int i;
for(i=0;i<n;i++)
{
cout<<arr[i]<<" ";
}
}
void shell_sort(int arr[],int n)
{
int i,j,inc,key;//inc初始增量
//初始增量是n/2,每一趟之后除以2
for(inc=n/2;inc>0;inc/=2)
{
//每一趟采用插入排序
for(i=inc;i<n;i++)
{
key=arr[i];
for(j=i;j>=inc&&key<arr[j-inc];j-=inc)
{
arr[j]=arr[j-inc];
}
arr[j]=key;
}
}
}
int main()
{
int arr[]={
15,5,2,7,12,6,1,4,3,9,8,10};
shell_sort(arr,12);
print_sort(arr,12);
return 0;
}
基本都是插入排序,只不过变成了缩小增量来排序
还没有评论,来说两句吧...