Java数组排序—冒泡与希尔比较

Java的数组排序方法有很多,对于小量数据,大家差别都不大,使用经典的冒泡法就行了,但对于大量数据,则冒泡法就吃不消了,可以考虑希尔排序;
经过测试,对一个400*400的数组进行排序,冒泡法耗时30秒,而希尔法不到一秒!

冒泡排序测试代码:
public class Test {
 
public static void main(String args[]) {
 
//冒泡法从大到小排列acc_sort[i]数组a
int[] acc_sort = new int[400*400];
 
//初始化数组
for (int i = 0; i < acc_sort.length; i++) {
acc_sort[i] = i + 1;
}
 
//排序前输出前20个
System.out.println("before:");
prin(acc_sort);
 
bubbleSort(acc_sort);
 
//排序后输出前20个
System.out.println("after:");
prin(acc_sort);
}
 
public static void bubbleSort(int[] data){
for (int i = 0; i < data.length; i++) {
for (int j = i + 1; j < data.length; j++) {
if (data[i] < data[j]) { //只交换大的
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
}
}
 
public static void prin(int[] a){
for(int i=0; i<20; i++){
System.out.print( a[i] + " " );
}
System.out.println("");
}
 
}

希尔排序测试代码:
public class ShellTest {   
 
public static void main(String[] args) {
 
int[] acc_sort = new int[400*400];
 
//初始化数组
for (int i = 0; i < acc_sort.length; i++) {
acc_sort[i] = i+1;
}
 
//排序前输出前20个
System.out.println("before:");
prin(acc_sort);
 
shellSort(acc_sort);
 
//排序后输出前20个
System.out.println("after:");
prin(acc_sort);
}
 
public static void prin(int[] a){
for(int i=0; i<20; i++){
System.out.print( a[i] + " " );
}
System.out.println("");
}
 
public static void shellSort(int[] data){
int j;
for(int gap = data.length/2; gap > 0; gap /= 2){
for(int i = gap; i < data.length; i++){
int temp = data[i];
for(j = i; j >= gap && temp > data[j-gap]; j -= gap){
data[j] = data[j - gap];
}
data[j] = temp;
}
}
}
 
}
 

运行时间:
zwang@wzc:~/android_dev$ time java  Test (冒泡)
before:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
after:
160000 159999 159998 159997 159996 159995 159994 159993 159992 159991 159990 159989 159988 159987 159986 159985 159984 159983 159982 159981
 
real 0m29.289s (29秒)
user 0m28.946s
sys 0m0.016s
 
zwang@wzc:~/android_dev$ time java ShellTest (希尔)
before:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
after:
160000 159999 159998 159997 159996 159995 159994 159993 159992 159991 159990 159989 159988 159987 159986 159985 159984 159983 159982 159981
 
real 0m0.119s (0.1秒)
user 0m0.096s

sys 0m0.020s
 
原文地址:https://www.cnblogs.com/wzc0066/p/2948341.html