算法——希尔排序
希尔排序:
package com.algorithm.sort; import java.util.Scanner; /** * 希尔排序:基于插入排序的快速排序 */ public class Shell { /** * 排序代码 * @param a */ public static void sort(Comparable[] a) { //升序排列 int N = a.length; int h = 1; while(h < N/3) { h = 3*h+1; } while(h >= 1) { //将数组变为h有序 for(int i=h; i<N; i++) { for(int j=i; j>=h&&less(a[j],a[j-h]);j-=h) { exch(a,j,j-h); } } h = h/3; } } /** * * @param v * @param w * @return */ private static boolean less(Comparable v,Comparable w) { return v.compareTo(w) < 0; } private static void exch(Comparable[] a, int i, int j) { Comparable t = a[i]; a[i] = a[j]; a[j] = t; } /** * 打印数组 * @param a */ private static void show(Comparable[] a) { for(int i = 0; i<a.length;i++) { System.out.print(a[i] + " "); } } /** * 判断数组原始是否有序 * @param a * @return */ public static boolean isSorted(Comparable[] a) { for(int i = 1; i<a.length;i++) { if(less(a[i],a[i-1])) { return false; } } return true; } public static void main(String[] args) { // String[] a = new String[3]; // Scanner in = new Scanner(System.in); // for(int i=0;i<a.length;i++) { // a[i] = in.next(); // } String[] a = {"d","g","c","b","f","e","a"}; sort(a); System.out.println(isSorted(a)); show(a); } }

浙公网安备 33010602011771号