【排序算法 】希尔排序 shell sort(插入类排序)
来源:互联网 发布:java string 存储大小 编辑:程序博客网 时间:2024/06/05 12:01
【排序算法 】希尔排序 shell sort(插入类排序)
shell sort,希尔排序,也称为缩减增量排序算法,递减增量排序算法
希尔排序算法的描述
1、先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。
2、所有距离为d1的倍数的记录放在同一个组中,在各组内进行直接插入排序。
3、取第二个增量d2<d1重复上述的分组和排序,
4、直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。
更直白的描述
将数组间隔为increment的元素分别划分到若干个小组,对每一个小组进行直接插入排序(每一小组的数据量较小,操作代价更小);
不断地减小间隔,将数组划分为更多个小组,继续对每一个小组进行直接插入排序(可以使近邻的元素基本有序);
最后,将数组划分为 N 个小组,也即是对全体元素进行一次直接插入排序。
(最后一步,数组已经基本有序,就对数组直接插入排序)
希尔排序算法的解释
在数组内的元素基本有序的情况下,直接插入排序是非常高效的。
而希尔排序就是创造基本有序的条件,之后进行直接插入排序的。
解释它的做法,
希尔排序的思想是使数组中任意间隔为 increment 元素都是有序的。
对间隔为increment的元素进行直接插入排序,可以使一个元素一次性地朝着最终位置前进一大步
缩小间隔 increment,可以使任意一个局部的元素都是基本有序的。
当数组基本有序时,对全体元素进行直接插入排序。
时间复杂度
expense:
时间复杂度 O(n^(3/2))
希尔排序的实现
package algorithm.algorithm4.ch02_sort;import org.junit.Test;import java.util.Arrays;import java.util.Random;/** * algorithm: shell sort,希尔排序,也成为缩减增量排序算法,递减增量排序算法 * @author liyazhou * @create 2017-06-20 12:55 */public class Shell { public static void sort(Comparable[] arr){ int increment = arr.length; do{ increment = increment/3 + 1; // 当前的增量,保证最小增量是 1 // 每次为一个分组添加一个的新的元素,直到把所有的元素添加到各个分组中 for (int i = increment; i < arr.length; i ++){ Comparable newEle = arr[i]; // 待插入的新元素,下面的操作是找到合适的位置 int j = i-increment; // 组内的已排序的最后一个元素 // 小组内新添加了一个元素,对其进行插入排序 // 分组内所有比新元素大的元素依次向后移动increment位 for (; j >= 0 && arr[j].compareTo(newEle) > 0; j -= increment) // 对每一个小组,组内插入排序 arr[j+increment] = arr[j]; // 组内右边的元素较当前元素大,则一次往后移动一位 arr[j+increment] = newEle; // 把新元素插入到合适的位置 } } while (increment > 1); // 增量increment = 1时,是对全体基本有序的数组进行插入排序,之后停止循环 } @Test public void test(){ int N = 30; Integer[] arr = new Integer[N]; Random random = new Random(); for (int i = 0; i < N; i ++) arr[i] = random.nextInt(100); System.out.println(Arrays.toString(arr)); Shell.sort(arr); System.out.println(Arrays.toString(arr)); }}
阅读全文
1 0
- 【排序算法 】希尔排序 shell sort(插入类排序)
- 排序算法---希尔排序(Shell Sort)
- 算法----希尔排序(shell sort)
- 插入排序之希尔排序(Shell Sort)
- 插入排序—希尔排序(Shell Sort)
- 插入排序—希尔排序(Shell`s Sort)
- 经典排序算法 - 希尔排序Shell sort
- 经典排序算法 - 希尔排序Shell sort
- 经典排序算法 - 希尔排序Shell sort
- 排序算法-希尔排序 Shell Sort
- 经典排序算法 - 希尔排序Shell sort
- PHP实现排序算法----希尔排序(Shell Sort)
- 经典排序算法:希尔排序(Shell Sort)
- 希尔排序(Shell Sort)
- 希尔排序(Shell Sort)
- 希尔排序(shell sort)
- 希尔排序(Shell Sort)
- 希尔排序(Shell Sort)
- mysql忘记密码修改方式5.7以上版本!
- 机器学习问题的可解性的变化,不可能的事情正在慢慢变成现实
- 数据结构(二)链表(一)单链表
- flume加载问题整理
- 根据Interceptor 分析 OkHttp(一)
- 【排序算法 】希尔排序 shell sort(插入类排序)
- 监听wifi热点连接状态变化
- NDK中C++标准库、STL的配置;Include其他头文件
- linux中驱动异步通知应用程序的方法
- Unity Shader:实现菲涅尔+色散效果以及相关原理解析
- Java截取特定两个标记之间的字符串
- 机器学习趋向于平民化
- qt实现子窗口继承父窗口背景图片
- Ubuntu时间设置