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

    算法定义:

    希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。

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

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

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

    • 当较小的数在最右端的时候,将移动大量的数据。

    算法基本思想:

    先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;

    然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量  =1(  < …<d2<d1),即所有记录放在同一组中进行直接插入排序为止。

    一般的初次取序列的一半为增量,以后每次减半,直到增量为1。

    代码实现:

    public static void Sort(int[] arr) {
            int len = arr.length;
            while (true) {
                len = len / 2;
                for (int i = 0; i < len; i++) {
                    for (int j = i + len; j < arr.length; j = j + len) {
                        int tmp = arr[j];
                        int k;
                        for (k = j - len; k >= 0 && arr[k] > tmp; k = k - len) {
                            arr[k + len] = arr[k];
                        }
                        arr[k + len] = tmp;
                    }
                }
                if (len == 1) {
                    break;
                }
            }
        }
  • 相关阅读:
    part11-1 Python图形界面编程(Python GUI库介绍、Tkinter 组件介绍、布局管理器、事件处理)
    part10-3 Python常见模块(正则表达式)
    Cyclic Nacklace HDU
    模拟题 Right turn SCU
    状态DP Doing Homework HDU
    Dp Milking Time POJ
    区间DP Treats for the Cows POJ
    DP Help Jimmy POJ
    Dales and Hills Gym
    Kids and Prizes Gym
  • 原文地址:https://www.cnblogs.com/whu-2017/p/8971622.html
Copyright © 2011-2022 走看看