希尔排序

来源:互联网 发布:深圳市逻辑思维软件 编辑:程序博客网 时间:2024/06/04 18:39

希尔排序也属于插入排序的一种,但在时间效率上有较大改进。它的基本思想是:先设置一个增量,每次从左将相隔增量的位置的值有序,就是使用的插入法排序,然后将增量一步一步缩小,最后一步必须缩小到1。增量为n/2    n/4   n/8 ......1时的效率较高。



//shell 排序算法#include <iostream>#include <cstring>#include <cstdio>using namespace std;#define N 10005int shell[N];void shellsort(int *a, int len){    for(int gap=len/2; gap>0; gap--)//确定增量    {        for(int j=gap; j<len; j++)//从增量开始一直往后遍历        {            for(int k=j-gap; k>=0 && a[k]>a[k+gap]; k+=gap)  //每次遍历间隔为gap,每次插入一个数,当比前面的数小,就交换            {                swap(a[k], a[k+gap])            }        }    }}int main(){    int shell[] = {1,5,6,7,3,3,6,7,15,34,12,3,234,34}; //测试样例    shellsort(shell, 14);    for(int i=0; i<14; i++)        cout<<shell[i]<<" ";    cout<<endl;    return 0;}


0 0