成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

冒泡排序

13651657101 / 1653人閱讀

摘要:概述冒泡排序是一種簡單的排序算法。走訪數(shù)列的工作是重復(fù)地進行直到數(shù)列已經(jīng)排序完成。簡單點說,就是冒泡排序是將比較大的數(shù)字沉在數(shù)組的后面可以理解為下面,較小的浮在前面上面。

概述

冒泡排序是一種簡單的排序算法。它重復(fù)地走訪要排序的數(shù)列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數(shù)列的工作是重復(fù)地進行直到數(shù)列已經(jīng)排序完成。這個算法的名字由來是因為越小的元素會經(jīng)由交換慢慢“浮”到數(shù)列的開始。

簡單點說,就是:

冒泡排序是將比較大的數(shù)字沉在數(shù)組的后面(可以理解為下面),較小的浮在前面(上面)。

直觀釋義圖:

步驟

比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。

對每一對相鄰元素作同樣的工作,從開始第一對到結(jié)尾的最后一對。在這一點,最后的元素應(yīng)該會是最大的數(shù)。

針對所有的元素重復(fù)以上的步驟,除了最后一個。

持續(xù)每次對越來越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對數(shù)字需要比較。

實例

原始數(shù)據(jù):

3 5 2 6 2

第一輪

比較 3 和 5,5 大于 3 ,不需交換
3 5 2 6 2
繼續(xù)比較 5 和 2,5 大于 2,交換位置
3 2 5 6 2
繼續(xù)比較 5 和 6,6 大于 5,不需交換
3 2 5 6 2
繼續(xù)比較 6 和 2,6 大于 2,交換位置
3 2 5 2 6

6 下沉到最后,兩個2都分別向上(前)冒出。

第二輪

比較 3 和 2, 3 大于 2,交換位置
2 3 5 2 6
比較 3 和 5, 5 大于 3,不需交換
2 3 5 2 6
比較 5 和 2, 5 大于 2,交換位置
2 3 2 5 6
不需比較 5 和 6

第三輪

比較 2 和 3, 3 大于 2,不需交換
2 3 2 5 6
比較 3 和 2, 3 大于 2,交換位置
2 2 3 5 6
不需比較了

第四輪

比較 2 和 2,不需交換
2 2 3 5 6

四輪結(jié)束

2 2 3 5 6
代碼實現(xiàn)(Java)
package com.coder4j.main.arithmetic.sorting;

public class Bubble {

    /**
     * 冒泡排序
     * 
     * @param array
     * @return
     */
    public static int[] sort(int[] array) {
        int temp;
        // 第一層循環(huán)表明比較的輪數(shù), 比如 length 個元素,比較輪數(shù)為 length-1 次(不需和自己比)
        for (int i = 0; i < array.length - 1; i++) {
            System.out.println("第" + (i + 1) + "輪開始");
            // 第二層循環(huán),每相鄰的兩個比較一次,次數(shù)隨著輪數(shù)的增加不斷減少,每輪確定一個最大的,不需比較那個最大的
            for (int j = 0; j < array.length - 1 - i; j++) {
                if (array[j + 1] < array[j]) {
                    temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                }
                System.out.println("第" + (i + 1) + "輪,第" + (j + 1) + "次比較:");
                for (int k : array) {
                    System.out.print(k + " ");
                }
                System.out.println();
            }
            System.out.println("結(jié)果:");
            for (int k : array) {
                System.out.print(k + " ");
            }
            System.out.println();
        }
        return array;
    }

    public static void main(String[] args) {
        int[] array = { 3, 5, 2, 6, 2 };
        int[] sorted = sort(array);
        System.out.println("最終結(jié)果");
        for (int i : sorted) {
            System.out.print(i + " ");
        }
    }

}

測試輸出結(jié)果:

第1輪開始
第1輪,第1次比較:
3 5 2 6 2 
第1輪,第2次比較:
3 2 5 6 2 
第1輪,第3次比較:
3 2 5 6 2 
第1輪,第4次比較:
3 2 5 2 6 
結(jié)果:
3 2 5 2 6 
第2輪開始
第2輪,第1次比較:
2 3 5 2 6 
第2輪,第2次比較:
2 3 5 2 6 
第2輪,第3次比較:
2 3 2 5 6 
結(jié)果:
2 3 2 5 6 
第3輪開始
第3輪,第1次比較:
2 3 2 5 6 
第3輪,第2次比較:
2 2 3 5 6 
結(jié)果:
2 2 3 5 6 
第4輪開始
第4輪,第1次比較:
2 2 3 5 6 
結(jié)果:
2 2 3 5 6 
最終結(jié)果
2 2 3 5 6 

經(jīng)測試,與實例中結(jié)果一致。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/65438.html

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu)與算法(二):帶你讀懂冒泡排序(Bubble Sorting)

    摘要:經(jīng)過一次冒泡排序,最終在無序表中找到一個最大值,第一次冒泡結(jié)束。也是我們后面要說的冒泡排序的優(yōu)化。冒泡排序只執(zhí)行第一層循環(huán),而不會執(zhí)行第二層循環(huán)。因此冒泡排序的時間復(fù)雜度是。 showImg(https://user-gold-cdn.xitu.io/2019/6/19/16b6f986df6880f9?w=640&h=142&f=gif&s=17175);showImg(https:...

    chuyao 評論0 收藏0
  • JavaScript 數(shù)據(jù)結(jié)構(gòu)與算法之美 - 冒泡排序、插入排序、選擇排序

    摘要:之所以把冒泡排序選擇排序插入排序放在一起比較,是因為它們的平均時間復(fù)雜度都為。其中,冒泡排序就是原地排序算法。所以冒泡排序是穩(wěn)定的排序算法。選擇排序思路選擇排序算法的實現(xiàn)思路有點類似插入排序,也分已排序區(qū)間和未排序區(qū)間。 showImg(https://segmentfault.com/img/bVbuvnj?w=900&h=250); 1. 前言 算法為王。 想學好前端,先練好內(nèi)功,...

    canger 評論0 收藏0
  • 排序算法分析總結(jié)(附j(luò)s實現(xiàn))

    摘要:本文對一些排序算法進行了簡單分析,并給出了的代碼實現(xiàn)。平均時間復(fù)雜度不好分析,它是冒泡排序是穩(wěn)定的排序算法。冒泡排序是原地排序算法原地排序指的是空間復(fù)雜度是的排序算法。歸并排序,會將數(shù)組從中間分成左右兩部分。 本文對一些排序算法進行了簡單分析,并給出了 javascript 的代碼實現(xiàn)。因為本文包含了大量的排序算法,所以分析不會非常詳細,適合有對排序算法有一定了解的同學。本文內(nèi)容其實不...

    liaoyg8023 評論0 收藏0
  • 數(shù)據(jù)結(jié)構(gòu)與算法——冒泡排序

    摘要:多練練排序算法,不僅能夠讓我們知道一些排序方法的底層實現(xiàn)細節(jié),更能夠鍛煉我們的思維,提升編程能力。排序算法的穩(wěn)定性一個穩(wěn)定的排序,指的是在排序之后,相同元素的前后順序不會被改變,反之就稱為不穩(wěn)定。 1. 導(dǎo)言 因為這是排序算法系列的第一篇文章,所以多啰嗦幾句。 排序是很常見的算法之一,現(xiàn)在很多編程語言都集成了一些排序算法,比如Java 的Arrays.sort()方法,這種方式讓我們可...

    Yang_River 評論0 收藏0
  • 排序(1):冒泡排序

    摘要:一前言冒泡排序是一種交換排序。以升序冒泡排序為例,冒泡排序就是要每趟排序過程中通過兩兩比較相鄰元素,將小的數(shù)字放到前面,大的數(shù)字放在后面。所以,冒泡排序最好時間復(fù)雜度為。因此,冒泡排序的平均時間復(fù)雜度為。 一、前言 冒泡排序是一種交換排序。 什么是交換排序呢? 解:兩兩比較待排序的關(guān)鍵字,并交換不滿足次序要求的那對數(shù),直到整個表都滿足次序要求為止。 二、算法思想 它重復(fù)地走訪要排序的...

    CrazyCodes 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<