希尔排序

希尔排序

╄→гoц情女王★ 提交于 2019-11-26 20:07:01
希尔排序是插入排序的一种,也叫做缩减增量排序,是对插入排序的一种优化,但是不稳定。 public class ShellSort { /** *希尔排序,也可以叫做缩减增量排序,不稳定,为了减少比较次数,如插入排序 需要n X n * 原理:通过比较相距一定间隔的元素来工作; * 各躺所用的距离随着算法的进行而减少,知道只比较相邻元素的最后一个排序位置 * * 所间隔的k元素都被排序,相比于插入排序,时间会减少 */ public static void main(String[] args) { int[] a = {77, 12, 88, 42, 7, 22, 78}; sort(a); System.out.println(Arrays.toString(a)); } public static void sort(int[] a) { int j; for(int gap = a.length/2; gap > 0; gap /= 2) { for(int i = gap; i < a.length; i++) { int tmp = a[i]; for(j = i; j >= gap && tmp < a[j-gap]; j -= gap) { a[j] = a[j-gap]; } a[j] = tmp; } } }} 来源: https://www.cnblogs

希尔排序

流过昼夜 提交于 2019-11-26 15:52:55
希尔排序 不断缩小增量的插入排序 原理 以某个增量h为步长跳跃分组进行插入排序,增量是一个从h逐渐缩小至1的过程,所以又称缩小增量排序。 其核心在于间隔序列设定,是与插入排序的本质区别。插入排序始终增量为1。 最佳增量: k趟排序增量步长为(2^k)-1,即增量序列(2^k)-1,…15,7,3,1 分析 时间复杂度:nlogn 代码 void shellsort(int a[],int len){ int gap = len; while(gap = gap/2){//增量 for(int i=gap;i<len;i++){//下面的就是插入排序,间距为gap int key=a[i]; int j=i-gap; while(j>=0 && a[j]>key){ a[j+gap] = a[j]; j-=gap; } a[j+gap] = key; } } } 来源: https://www.cnblogs.com/pacino12134/p/11325068.html