zoukankan      html  css  js  c++  java
  • 希尔排序

    1 基本思想 

      1)设待排序元素序列有n个元素,首先取一个整数increment(小于n)作为间隔将全部元素分为increment个子序列,所有距离为increment的元素放在同一个子序列中,在每一个子序列中分别实行直接插入排序。然后缩小间隔increment,重复上述子序列划分和排序工作。直到最后取increment=1,将所有元素放在同一个子序列中排序为止。
      2)由于开始时,increment的取值较大,每个子序列中的元素较少,排序速度较快,到排序后期increment取值逐渐变小,子序列中元素个数逐渐增多,但由于前面工作的基础,大多数元素已经基本有序,所以排序速度仍然很快。

    2 基本步骤

      我们来看下希尔排序的基本步骤,在此我们选择增量gap=length/2,缩小增量继续以gap = gap/2的方式,这种增量选择我们可以用一个序列来表示,{n/2,(n/2)/2...1},称为增量序列。希尔排序的增量序列的选择与证明是个数学难题,我们选择的这个增量序列是比较常用的,也是希尔建议的增量,称为希尔增量,但其实这个增量序列不是最优的。此处我们做示例使用希尔增量。

      

    3 动画演示

      

    4 参考代码 

    package com.tcxpz.shell;
    /**
     * 希尔排序
     * @author jgp QQ:1072218420
     *
     */
    public class ShellSort {
        public static void main(String []args){
            int[] arr = new int[]{8,9,1,7,2,3,5,4,6,0};
            System.out.print("排序前:");
            for(int num:arr)
                System.out.print(num+" ");
            System.out.println();
            //进行排序
            int[] bubble_arr = sort(arr);
            System.out.print("排序后:");
            for(int num:bubble_arr)
                System.out.print(num+" ");
        }
        //希尔排序
        public static int[] sort(int []arr){
            //增量gap,并逐步缩小增量
           for(int gap=arr.length/2;gap>0;gap/=2){
               //从第gap个元素,逐个对其所在组进行直接插入排序操作
               for(int i=gap;i<arr.length;i++){
                   int j = i;
                   while(j-gap>=0 && arr[j]<arr[j-gap]){
                       //插入排序采用交换法
                       int temp = arr[j];
                       arr[j] = arr[j-gap];
                       arr[j-gap] = temp;
                       j-=gap;
                   }
               }
           }
           return arr;
        }
    }

      

  • 相关阅读:
    如何提高IT团队的执行力?
    Internet Explorer 安全区域注册表项说明
    用C#编写ActiveX控件(一) 转载
    用C#编写ActiveX控件(二) 转载
    关于《用C#编写ActiveX控件》的几点说明 转载
    【经典】单调栈+离线+线段树区间更新——求所有子区间gcd之和 icpc cerc 2019 b
    SQL语句
    Windows 程序设计学习记录(1)类的定义和应用
    Windows 程序设计学习记录(2)数据链表删除,增加的算法
    推荐一些博客网站
  • 原文地址:https://www.cnblogs.com/tcxpz/p/10588693.html
Copyright © 2011-2022 走看看