希尔排序

希尔排序(java)

  1. 一种基于插入排序的快速的排序算法,适用于大量数据
  2. 算法的性能取决于h,还取决于h之间的数学性质,目前无法证明某个序列是最好的
  3. 数组越大优势越大

  交换不相邻的元素以对数组的局部进行排序,使数组中任意相隔为h的元素都是有序的

public class shell
{
    public void sort(Comparable[] a)
    {
        int h=1
        while(h<a.length/3)    h=h*3+1;
            while(h>0)   //直到分成1个单位
            {
                for(i=h; i<a.length; i++)
            {
                for(int j=i; j<=h && a[j]<a[j-h]; j=j-h)
                swap(a[j],a[j-h]);
            }
            h=h/3;
            }
    }
}    

希尔排序完整(c/c++)

可过洛谷p1177【模板】快速排序

#include<iostream>
using namespace std;
int main()
{
    int N;
    int *a = new int [100005];

    cin>>N;
    for(int i=0; i<N; i++)
        cin>>a[i];

    //希尔排序
    int h=1;
    while(h<N-1) h=h*3+1;
    while(h>=1)
    {
        for(int i=h; i<N; i++)
        {
            for(int j=i; j>=h&&a[j]<a[j-h]; j-=h)
            {
                int temp=a[j-h];
            a[j-h]=a[j];
            a[j]=temp;
            }
        }
        h=h/3;
    }
     for(int i=0; i<N; i++)
        cout<<a[i]<<" ";
        cout<<endl;
        return 0;
}

 

posted @ 2018-11-10 23:17  黄骏捷的博客  阅读(228)  评论(0编辑  收藏  举报