zoukankan      html  css  js  c++  java
  • 30排序算法之希尔排序

    排序算法之希尔排序

    基本原理:

    Donald.L.Shell设计的排序算法。

    特点:

    (1)缩小增量  

    (2)多遍插入排序

     例如,选用增量序列(9,5,3,1)

      4个增量,进行4遍插入排序  。

    术语:

     h-排序(h-sorted)

    h-子序列(h-subsequence)

      h-有序的(h-ordered) 

    希尔排序算法

    void Shell_sort(int a[ ],int d[ ],int n,int t)

       { int  i,j,h,k,x;

    1.  for(h=0;h<t;h++)

    2.    {    k=d[h];    //当前增量为k

    3.          for(i=k;i<n;i++)

    4.            {  for(x=a[i],j=i-k;j>=0&&x<a[j];)

    5.                  {   a[j+k]=a[j];     j-=k;   }

    6.              a[j+k]=x;  //x就位

                   }

               }

          }

    示例

    希尔排序源代码:
    //希尔排序
    void ShellSort(int arr[],int n)
    {
        int i,j,temp;
        int d = n;
        do
        {
            d = d/3 + 1;
            for(i=d;i<n;i++)
            {
                if(arr[i] < arr[i-d])
                {
                    temp = arr[i];
                    for(j=i-d;j>=0&&arr[j]>temp;j-=d)
                    {
                        arr[j+d] = arr[j];
                    }
                    arr[j+d] = temp;
                }
            }
        }while(d>1); 
    }
    
    int main()
    {
        int arr[10]={3,5,8,2,4,13,9,1,16,7};
        ShellSort(arr,10);
        for(int i=0;i<10;++i)
            printf("%d ",arr[i]);
        getchar();
        return 0;
    }
  • 相关阅读:
    反射
    left join 多个表关联时,将表值置换
    distinct 与 group by 去重
    常见错误
    字符串的处理
    排版样式
    VS低版本打开高版本解决方案(如08打开10、12、13版本vs编译的项目)
    Dw CS 破解
    VS2013如何避开安装时IE10的限制
    UVa540 Team Queue
  • 原文地址:https://www.cnblogs.com/gd-luojialin/p/8509795.html
Copyright © 2011-2022 走看看