美文网首页
冒泡排序及冒泡排序优化

冒泡排序及冒泡排序优化

作者: 好学人 | 来源:发表于2020-07-25 11:44 被阅读0次

    冒泡排序(Bubble Sort),是计算机科学领域一种较简单的排序算法。

    冒泡排序会重复地走访过要排序的元素数列,依次比较两个相邻的元素,如果顺序错误(如从大到小、首字母从Z到A)就把它们交换过来。

    走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

    时间复杂度:O(n^2)

    排序方式:原地排序

    普通冒泡排序

    普通冒泡排序共需要进行n-1趟排序,每趟进入n-1-i次比较(交换),代码实现如下:

    /**
     * 冒泡排序(升序)
     */
    public static void bubbleSort(int[] array) {
        for (int i = 0; i < array.length - 1; i++) {
            for (int j = 0; j < array.length - 1 - i; j++) {
                int item1 = array[j];
                int item2 = array[j + 1];
                if (item1 > item2) {
                    array[j] = item2;
                    array[j + 1] = item1;
                }
            }
        }
    }
    

    优化冒泡排序

    在普通冒泡排序的基础上,若我们发现一趟排序中没有发生任何交换,则说明数组排序已完成。

    /**
     * 优化冒泡排序(升序)
     */
    public static void bubbleSort(int[] array) {
        for (int i = 0; i < array.length - 1; i++) {
            boolean swap = false;
            for (int j = 0; j < array.length - 1 - i; j++) {
                int item1 = array[j];
                int item2 = array[j + 1];
                if (item1 > item2) {
                    array[j] = item2;
                    array[j + 1] = item1;
                    swap = true;
                }
            }
            if (!swap) { // 未发生交换,说明排序完成
                System.out.println("排序完成" + i + "/" + array.length);
                break;
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:冒泡排序及冒泡排序优化

          本文链接:https://www.haomeiwen.com/subject/uxeplktx.html