冒泡排序Java语言实现及其优化

冒泡排序性能数据:
冒泡排序Java语言实现及其优化_第1张图片

package com.shan.bubbleSort;

/** * * @author shan * 冒泡排序算法:需要便利几次数组,在每次遍历中,比较相邻的元素。如果某一对元素是降序, * 则交换它们之间的值;否则保持不变。 * 特点:第一次遍历完成,最后一个元素为数组中的最大元素 * 第二次遍历完成,倒数第二个元素为数组中的第二大元素 * 如此持续到所有元素排好。 * 根据特点我们在第 k 次遍历中不需要考虑最后的 k-1 个元素,因为它们已经排好序。 * * 对于 list.length 长度的数组,需要 list.length -1 次遍历 * * 优化方案: * 因为如果在某次遍历中没有发生元素的交换,说明已经排好序。 * */

public class BubbleSort {

    public static void bubbleSort(int[] list) {
        boolean needNextPass = true;
        // 对于 list.length 长度的数组,需要 list.length -1 次遍历
        for (int k = 1; k < list.length && needNextPass; k++) {
            needNextPass = false;
            // 第 k 次遍历中不需要考虑最后的 k-1 个元素,因为它们已经排好序。
            for (int i = 0; i < list.length - k; i++) {
                // 在每次遍历中,比较相邻的元素。如果某一对元素是降序,则交换它们之间的值;否则保持不变。
                if (list[i] > list[i + 1]) {
                    int temp = list[i];
                    list[i] = list[i + 1];
                    list[i + 1] = temp;
                    needNextPass = true;
                }
            }
        }
    }

    public static void main(String[] args) {
        int[] list = { 2, 3, 2, 5, 1, 6, -2, 3, 14, 12 };
        bubbleSort(list);
        for (int i = 0; i < list.length; i++) {
            System.out.print(list[i] + " ");
        }
    }

}

输出:
-2 1 2 2 3 3 5 6 12 14 

你可能感兴趣的:(算法,冒泡排序,排序算法)