希尔排序概念不做介绍,数据结构之类的书上都有,或者Google百度。
以下是代码:
package com.yarm.test;
public class ShellSortTest {
/**
* 希尔排序
* 时间复杂度:O(n^2)
* @param a
*/
public static <AnyType extends Comparable<? super AnyType>>
void shellSort(AnyType [] a) {
int j;
for(int gap = a.length / 2; gap > 0; gap /=2) {
for(int i = gap; i < a.length; i++) {
AnyType tmp = a[i];
for(j = i; j >= gap && tmp.compareTo(a[j - gap]) < 0; j -= gap) {
a[j] = a[j - gap];
}
a[j] = tmp;
}
}
}
//测试
public static void main(String[] args) {
//字符数组排序
String[] strArr = {"2", "1", "3","0"};
System.out.println("字符数组排序前:");
for (int i = 0; i < strArr.length; i++) {
System.out.println(strArr[i]);
}
ShellSortTest.shellSort(strArr);
System.out.println("字符数组排用希尔排序后:" );
for (int i = 0; i < strArr.length; i++) {
System.out.println(strArr[i]);
}
System.out.println("---------------------");
//整型字符数组排序
Integer[] intArr = {1, 2 ,5 ,3 ,4};
System.out.println("整型数组排序前:");
for (int i = 0; i < intArr.length; i++) {
System.out.println(intArr[i]);
}
ShellSortTest.shellSort(intArr);
System.out.println("整型数组排用希尔排序后:" );
for (int i = 0; i < intArr.length; i++) {
System.out.println(intArr[i]);
}
}
}
控制台结果:
字符数组排序前:
2
1
3
0
字符数组排用希尔排序后:
0
1
2
3
---------------------
整型数组排序前:
1
2
5
3
4
整型数组排用希尔排序后:
1
2
3
4
5
时间复杂度:O(n^2)