實現(xiàn)希爾排序的方法類
package com.hcc.util;
/**
* 希爾排序
* @author hcc
*
*/
public class HillSort {
/**
* 希爾排序:就是直接插入排序的進化版
* @param arr
* @param arrLength
*/
public static void sortingMinToMax(int[] arr,int arrLength) {
int constant = arrLength/2;
while(constant > 0) {
for(int i = constant;i<arrLength;i++) {
int j = i - constant;
int temp = arr[i];
for(;j >= 0 && arr[j] > temp;) {
arr[j+constant] = arr[j];
j = j - constant;
}
arr[j+constant] = temp;
}
constant = constant/2;
}
}
/**
* 從大到小
* @param arr
* @param length
*/
public static void sortingMaxToMin(int[] arr,int length) {
int constant = length/2;
while(constant > 0) {
for(int i = constant;i < length;i++) {
int temp = arr[i];
int j;
for(j = i-constant;j >= 0 && arr[j] < temp;) {
arr[j+constant] = arr[j];
j = j - constant;
}
arr[j+constant] = temp;
}
constant = constant/2;
}
}
}
測試類
public class Test {
public static void main(String[] args) {
// 69 65 90 37 92 6 28 54
int[] arr = {69,65,70,90,37,92,6,28,54,20};
System.out.println("原始數(shù)據(jù):");
printSortData(arr);
System.out.println();
System.out.println("希爾排序:");
hillSortTest(arr);
}
/**
* 希爾排序測試方法
* @param arr
*/
public static void hillSortTest(int[] arr) {
//HillSort.sortingMinToMax(arr, arr.length);
HillSort.sortingMaxToMin(arr, arr.length);
printSortData(arr);
}
/**
* 打印輸出方法
* @param arr
*/
public static void printSortData(int [] arr) {
int arrLength = arr.length;
for(int i = 0;i < arrLength;i++) {
System.out.print(arr[i]+" ");
}
}
}