zoukankan      html  css  js  c++  java
  • 三种冒泡排序的实现与时间快慢的比较

    废话小说,看代码:

    import java.util.Date;
    
    public class BubbleSort {
    
        // 冒泡排序正常做法
        static void bubbleSort1(int a[]) {
            int temp;
            for (int i = 0; i < a.length; i++)
                for (int j = 1; j < a.length - i; j++)
                    if (a[j - 1] > a[j]) {
                        temp = a[j];
                        a[j] = a[j - 1];
                        a[j - 1] = temp;
                    }
        }
    
        // 防止排达的重新排冒泡排序,设置一个标志,如果这一趟发生了交换,则为true,否则为false。如果有一趟没有发生交换,说明排序完成
        static void bubbleSort2(int a[]) {
            int temp;
            boolean flag = true;
            int k = a.length;
            while (flag) {
                flag = false;
                for (int j = 1; j < k; j++)
                    if (a[j - 1] > a[j]) {
                        temp = a[j];
                        a[j] = a[j - 1];
                        a[j - 1] = temp;
                        flag = true;
                    }
                k--;
            }
    
        }
    
        // 排除前面没有排序,后面排好序的情况.记录最后交换的位置,第二次从头遍序到这个位置
        static void bubbleSort3(int a[]) {
            int k, flag = a.length;
            int temp;
            while (flag > 0) {
                k = flag;
                flag = 0;
                for (int i = 1; i < k; i++) {
                    if (a[i - 1] > a[i]) {
                        temp = a[i];
                        a[i] = a[i - 1];
                        a[i - 1] = temp;
                        flag = i;
                    }
                }
            }
        }
    
        public static void main(String[] args) {
    
            int arr1[] = {2, 3, 4, 5, 1, 2, 4, 5, 7, 3, 5, 8 , 3, 8, 9, 11, 12, 13,14,15,15,32,34,35,45,56,67,78,89,99 };
            int arr2[] = { 2, 3, 4, 5, 1, 2, 4, 5, 7, 3, 5, 8 , 3, 8, 9, 11, 12, 13,14,15,15,32,34,35,45,56,67,78,89,99 };
            int arr3[] = { 2, 3, 4, 5, 1, 2, 4, 5, 7, 3, 5, 8 , 3, 8, 9, 11, 12, 13,14,15,15,32,34,35,45,56,67,78,89,99 };
    
            long startTime = new Date().getTime();
            long endTime ;
            bubbleSort1(arr1);
            for (int i = 0; i < arr1.length; i++) {
                System.out.print(arr1[i] + "    ");
            }
            endTime = new Date().getTime();
            System.out.println(endTime - startTime);
            startTime = endTime;
            bubbleSort2(arr2);
            for (int i = 0; i < arr2.length; i++) {
                System.out.print(arr2[i] + "    ");
            }
            endTime = new Date().getTime();
            System.out.println(endTime - startTime);
            startTime = endTime ;
            bubbleSort3(arr3);
            for (int i = 0; i < arr3.length; i++) {
                System.out.print(arr3[i] + "    ");
            }
            endTime = new Date().getTime() ;
            System.out.println(endTime - startTime);
            
        }
    
    }

    结果显示如下:

    1 2 2 3 3 3 4 4 5 5 5 7 8 8 9 11 12 13 14 15 15 32 34 35 45 56 67 78 89 99     2
    1 2 2 3 3 3 4 4 5 5 5 7 8 8 9 11 12 13 14 15 15 32 34 35 45 56 67 78 89 99    1
    1 2 2 3 3 3 4 4 5 5 5 7 8 8 9 11 12 13 14 15 15 32 34 35 45 56 67 78 89 99    0

    由于数据的大小关系,结果不是很明显,但是可以很明显看出:所需要的时间是从大到小的。

  • 相关阅读:
    ORA-32004 的错误处理
    告警日志
    ORACLE 归档日志打开关闭方法
    oracle归档日志配置查询
    教你如何阅读Oracle数据库官方文档
    使用Oracle安装账户登录数据库
    poj 2186 (强连通缩点)
    poj 2516 (费用流)
    STL集合容器set按照由小到大或者由大到小的顺序存放元素
    Android项目 手机安全卫士(代码最全,注释最详细)之十二 设置中心的界面
  • 原文地址:https://www.cnblogs.com/qgzhan/p/3118967.html
Copyright © 2011-2022 走看看