public class ShellSort { public void shellSort(int[] array, int n) { int i, j, gap; int temp; for (gap = n / 2; gap > 0; gap /= 2) {// 计算gap大小 for (i ...
分类:
编程语言 时间:
2018-05-26 15:34:24
阅读次数:
240
回顾插入排序:越有序越快 好的时间复杂度为O(n)坏的为O(n^2) 假如有10000个数进行排序那么直接插入排序的时间复杂度为10000*10000 如果采用分组思想,让组内进行直接插入排序那么时间复杂度就为100*100*100 我们希尔排序就是利用分组思想进行排序的 让每组数据变得有序 越有序 ...
分类:
编程语言 时间:
2018-05-14 21:34:13
阅读次数:
205
一、希尔排序 定义增量序列 DM > DM-1 > … > D1 = 1 对每个 Dk 进行“Dk-间隔”排序( k = M, M-1, … 1 ) 注意: “Dk-间隔”有序的序列,在执行“Dk-1-间隔”排序后,仍然是“Dk-间隔”有序的 希尔增量序列 原始希尔排序 DM = [ N / 2 ] ...
分类:
编程语言 时间:
2018-05-10 21:44:21
阅读次数:
420
主要由三个插入排序的重要算法:直接插入排序、折半插入排序和希尔排序。 其基本思想在于每次讲一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中,直到全部记录插入完成。 直接插入排序 稳定 O(n^2) 适用性:直接插入排序算法适用于顺序存储和链式存储的线性表。当为链式存储时,可以从前往后查 ...
分类:
编程语言 时间:
2018-05-09 21:05:52
阅读次数:
223
在前面文章中介绍的直接插入排序,它对于已经基本有序的数据进行排序,效率会很高,而如果对于最初的数据是倒序排列的,则每次比较都需要移动数据,导致算法效率降低。 希尔排序的基本思想就是:将需要排序的序列划分为若干个较小的序列,对这些序列进行直接插入排序,通过这样的操作可使需要排序的数列基本有序,最后再使用一次直接插入排序。 &nbs
分类:
编程语言 时间:
2018-05-09 15:01:19
阅读次数:
178
希尔排序是一种基于插入排序的快速排序算法,对于大规模乱序数组插入排序很慢,因为它只会交换相邻的元素,因此元素只能一点一点的从数组的一端移动到另一端。例如,如果主键最小的元素正好在数组的尽头,要讲它挪到正确的位置就需要N-1次移动。希尔排序为了加快速度简单的改进了插入排序,交换不相邻的元素以对数组的局 ...
分类:
编程语言 时间:
2018-05-07 13:25:25
阅读次数:
190
https://www.jianshu.com/p/e6ad4423efcd 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归 ...
分类:
编程语言 时间:
2018-05-02 23:55:33
阅读次数:
214
常见排序算法有 1. 选择排序 2. 插入排序 3. 冒泡排序 4. 快速排序 5. 归并排序 这里写了5种排序的java demo,还有很多排序,希尔排序,计数排序,堆排序,基数排序等 Sort.java ...
分类:
编程语言 时间:
2018-05-01 12:26:00
阅读次数:
179
算法定义: 希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。 希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率。 但插入排序一般来说 ...
分类:
编程语言 时间:
2018-04-29 19:55:38
阅读次数:
216
package com.fh.sort; /** * @author * * @create 2018-03-06 下午10:22 **/ public class Sort { public static void main(String[] args){ Sort sort=new Sort()... ...
分类:
编程语言 时间:
2018-04-28 23:49:06
阅读次数:
290