博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
希尔shell排序——java实现
阅读量:5099 次
发布时间:2019-06-13

本文共 1942 字,大约阅读时间需要 6 分钟。

希尔排序是对插入排序的优化,将插入排序的交换步长由1增加到h。

希尔排序的思想是使数组中任意间隔为h的元素有序。步长调幅为h = 3*h + 1, 也就是1,4,13,40,121,364, 1003....这种步长算法是经过论文证明为比较高效的步长。

最开始由最大步长开始排序,最大步长为

while(h < n/3) h = 3*h +1

步长最大时,比较的元素非常少,速度很快

后来步长逐渐缩短,比较的元素越来越多,但是此时元素的有序性也变好了,排序速度还是会很快。

while(h>=1){

  for: i from h~n{

    for: j from i~h,j = j-h;

      比较a[j]和a[j-h],并根据比较结果交换元素位置,

  }

}

 

1 package 排序; 2  3 import java.util.Arrays; 4 import edu.princeton.cs.algs4.In; 5 import edu.princeton.cs.algs4.StdOut; 6 /** 7  * @author evasean www.cnblogs.com/evasean/ 8  */ 9 @SuppressWarnings("rawtypes")10 public class Shell排序 {11     public static void sort(Comparable[] a) {12         int N = a.length;13         int h = 1;14         while (h < N / 3)15             h = 3 * h + 1;16         while (h >= 1) {17             for (int i = h; i < N; i++) { 18                 for (int j = i; j >= h && less(a[j], a[j - h]); j -= h)19                     exch(a, j, j - h);20             }21             h = h / 3;22         }23     }24 25     @SuppressWarnings("unchecked")26     private static boolean less(Comparable v, Comparable w) {27         return v.compareTo(w) < 0;28     }29 30     private static void exch(Comparable[] a, int i, int j) {31         Comparable t = a[i];32         a[i] = a[j];33         a[j] = t;34     }35 36     private static void show(Comparable[] a) {37         for (int i = 0; i < a.length; i++)38             StdOut.print(a[i] + " ");39         StdOut.println();40     }41 42     public static boolean isSorted(Comparable[] a) {43         for (int i = 1; i < a.length; i++) {44             if (less(a[i], a[i - 1]))45                 return false;46         }47         return true;48     }49 50     public static void main(String[] args) {51         String[] a = new In().readAllStrings();52         StdOut.println(Arrays.toString(a));53         sort(a);54         assert isSorted(a);55         show(a);56     }57 }

 

转载于:https://www.cnblogs.com/evasean/p/7233011.html

你可能感兴趣的文章
(安卓)一般安卓开始界面 Loding 跳转 实例 ---亲测!
查看>>
Mysql 索引优化 - 1
查看>>
LeetCode(3) || Median of Two Sorted Arrays
查看>>
JSDoc规范
查看>>
大话文本检测经典模型:EAST
查看>>
文本主题模型之LDA(一) LDA基础
查看>>
linux基础命令-chgrp/chown/chomd
查看>>
待整理
查看>>
iOS 6
查看>>
Nginx入门篇-基础知识与linux下安装操作
查看>>
一次动态sql查询订单数据的设计
查看>>
C# 类(10) 抽象类.
查看>>
1.linux ping:unknown host www.***.***
查看>>
字符串处理函数
查看>>
jenkins修改时区
查看>>
比较git commit 两个版本之间次数
查看>>
jQuery.support
查看>>
【LeetCode】167. Two Sum II - Input array is sorted
查看>>
如何在g++中添加include文件的目录
查看>>
BlockingQueue深入解析
查看>>