zoukankan      html  css  js  c++  java
  • 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
     
  • 相关阅读:
    自动生成小学四则运算题目
    python自动生成小学四则运算题目
    大学排名
    中国大学排名
    pachong
    paiqiu
    文件管理
    软件工程课作业 2020-11-23
    时序图,E-R图,数据流程图
    考研信息查询系统需求规格说明书
  • 原文地址:https://www.cnblogs.com/wzc0066/p/2948341.html
Copyright © 2011-2022 走看看