您的位置:首页 > 其它

算法:希尔排序

2017-03-28 21:11 148 查看
希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法

希尔排序是基于插入排序的以下两点性质而提出改进方法的:

插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率。

但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位。

Shell排序的思想:
        先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高。

代码如下:

#include <iostream>
#include <cassert>

using namespace std;

void  shell_sort(int *arr,int n);

void  shell_sort(int *arr,int n)
{
assert(arr);
int gap,i,j,temp;
gap = n /2;
for(gap; gap > 0;gap /=2)
for(j = gap; j < n; j++)
{
if(arr[j] < arr[j - gap])
{
temp = arr[j];
int k ;

for(k = j - gap ;k >=0 &&  arr[k ] > temp; k-=gap )
arr[k+gap] = arr[k];

arr[k+gap] = temp;

}
}

}

int main()
{
int  a[5] = {4,6,2,8,1};

shell_sort(a,5);
int i = 0;

for(i = 0;i < 5; i ++)
cout << "  " << a[i] << "  ";

cout <<endl;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: