三种冒泡排序的实现与时间快慢的比较

废话小说,看代码:

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

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

原文地址:https://www.cnblogs.com/qgzhan/p/3118967.html