java方式实现希尔排序】的更多相关文章

一.希尔排序简述和基本思想 希尔排序也称递减增量排序算法,是插入排序的一种更高效的改进版本.但是希尔排序是非稳定排序的算法.希尔排序比一般插入排序有以下几点改进: 一般插入排序每次只能将数据移动一位,而希尔排序是按照步长移动的(步长=数组长度/2),步长是递减的. 希尔排序是通过多次划分子序列,对子序列进行排序,使得整个序列基本有序,再对整个序列的所有元素进行直接插入排序,提高了最后直接插入排序的效率. 希尔排序的基本思想是:先将整个待排序的序列分割成为若干个子序列分别进行直接插入排序,待整个序…
代码(部分为别人代码): 1.希尔排序(ShellSort) /* * 希尔排序:先取一个小于n的整数d1作为第一个增量, * 把文件的全部记录分成(n除以d1)个组.所有距离为d1的倍数的记录放在同一个组中. * 先在各组内进行直接插入排序:然后,取第二个增量d2<d1重复上述的分组和排序, * 直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止. */ public class ShellSort { public sta…
希尔排序 第8节 希尔排序练习题 对于一个int数组,请编写一个希尔排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组.保证元素小于等于2000. 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] Java (javac 1.7) 代码自动补全           1 import java.util.*; 2 3 public class ShellSort { 4 public int[] shellSort(int[] A, int n…
希尔排序严格来说是基于插入排序的思想,又被称为缩小增量排序. 具体流程如下: 1.将包含n个元素的数组,分成n/2个数组序列,第一个数据和第n/2+1个数据为一对... 2.对每对数据进行比较和交换,排好顺序: 3.然后分成n/4个数组序列,再次排序: 4.不断重复以上过程,随着序列减少并直至为1,排序完成.      假如有初始数据:25  11  45  26  12  78. 1.第一轮排序,将该数组分成 6/2=3 个数组序列,第1个数据和第4个数据为一对,第2个数据和第5个数据为一对,…
算法描述:先将待排序序列的数组元素分成多个子序列,使得每个子序列的元素个数相对较少,然后对各个子序列分别进行直接插入排序,待整个待排序序列“基本有序”后,再对所有元素进行一次直接插入排序. package sorting; /** * 希尔排序 * 平均O(nlogn),最坏O(nlogn);空间复杂度O(1);不稳定;较复杂 * @author zeng * */ public class ShellSort { public static void shellSort(int[] a) {…
一.基本思想 每一趟找到未排序序列的最小(大)值,把它存放在已排序序列末尾,直到把所有的数据排序完,即是第k趟找到剩余未排序数据的最小(大)值,然后把这个最小(大)值存放在数组的第k(k=1,2...n)位置(对应数组元素下标为k-1),直到把所有的数据排序完,一共需要进行n-1趟(n表示数组的长度),每一趟进行n-k次比较,找到该趟的最小值,比较总次数位n (n- 1) / 2次,所以时间复杂度位O(n2).空间复杂度为O(1). 二.实现步骤 首先在未排序序列中找到最小(大)元素,存放在排序…
java希尔排序 1.基本思想: 希尔排序也成为"缩小增量排序",其基本原理是,现将待排序的数组元素分成多个子序列,使得每个子序列的元素个数相对较少,然后对各个子序列分别进行直接插入排序,待整个待排序列"基本有序"后,最后在对所有元素进行一次直接插入排序.因此,我们要采用跳跃分割的策略:将相距某个"增量"的记录组成一个子序列,这样才能保证在子序列内分别进行直接插入排序后得到的结果是基本有序而不是局部有序.希尔排序是对直接插入排序算法的优化和升级.…
希尔排序是冲破二次时间屏障的第一批算法之一. 它是通过比较相距一定间隔的元素来工作,各趟比较所用的距离随着算法的进行而减小,直到最后一趟(比较相邻元素)为止.因此希尔排序也叫缩减增量排序. 希尔排序使用一个序列h1,h2,h3...hk来排序. 具体的意思是 第一趟排序比较的是相隔为hk的元素,也就是比较a[i]与a[i+hk],保证a[i]<=a[i+hk]. 第二次比较的是相隔为hk-1的元素,也就是比较a[i]与a[i+hk-1],保证a[i]<=a[i+hk-1]. 直到最后比较的是相…
希尔排序简述 希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率.(希尔排序先将部分数据进行排序,相当于已经部分排好序) 但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位.(希尔排序先将间隔大的数据进行大的移位,后期的移位距离相对要小很多) 分析: 先去一个小于n的整数的H作为第一个增量,把文件的全部记录分组.即将所有距离为H的倍数的记录放在同一个族中,先在各组内进行直接插入排序:然后去第二个增量重复上述…
思路:希尔排序是分组基础上的直接插入排序,给定的一个步长数组,每个小组先直接插入排序.虽然有四次循环,但是每次循环次数少. package com.sheepmu.text; import java.util.Arrays; import java.util.Comparator; /* * @author sheepmu */ public class Sort { public static void main(String[] args){ int[] arr={64,34,25,87,1…