數組的冒泡排序


首先我們要理解排序的定義:

冒泡排序(Bubble sort):相鄰的兩個數逐個的做比較,如果前一個數比后一個數小那么就交換過來,當第一輪比較完畢之后最小的值一定在末尾

我們可以先畫出以一張圖:

數組兩個相鄰的值去比較后面的數大於前面的數就會去交換,因此每輪比較后最小值都會出現在這次比較的最后一位

第二次比較:

第三次比較:

第四次比較:

 

好了,上面就是我們模擬計算機去比較一個數組;既然我們知道了如何去比較數組

那么我們該如何去編寫代碼,讓計算機會自動去比較呢?

這就要發揮我們自己的創造能力以及獨特的思維,言歸正傳,我們到底該如何寫出這個冒泡排序呢?

接下來就由我就來簡單的演示一下吧!

例子1:

 

這個就是最簡單的交換方法

我們看到這個方法:

Q:第一個for循環為什么從1開始,以及為什么是這個循環條件?

A:從1開始是因為外層循環代表的是比較輪數,不可能有第0輪這個東西把

    循環條件是由上面的表格觀察而出來的,比較輪數是小於這個數組的長度的

Q:第二個for循環從為什么從0開始,以及這個循環條件

A:因為第二個循環代表的是每一輪比較的次數,從0開始是也代表要交換的索引

     既然我們知道了這個循環代表的是比較次數,從上面的表格中可以得出這么一個結論

    交換次數  = 數組長度 - 當前輪數

   因為是從0開始的所以就要小於這個值,這就是我們的循環條件

最后if中的就好理解了加入后一個索引的數大於當前索引數,就去交換這兩個數。

 

 

 例子2:

利用求極值的思路去做冒泡排序

 這是第一次寫出的結果:

其實我們發現這個數組其實在第5行的時候就交換好了

可是程序並不會因此停下來,然后繼續交換從而得到了意外的結果

那么怎么來判斷這個數組是否已經排好序了,從而去停止整個循環

沒錯,就是然后判斷數組是否從大到小排好序了呢?

這里我使用了一個方法:

 

我們來看到這個方法:

 

我們默認這個數組是循序排序的,所以結果為true

然后開始循環:

假如有前面索引的數小於后面索引數,就說明這個數組不是降序排列的

就把結果改為false,並且跳出循環

這就是我們判斷數組是否降序排列的一個方法,

如果判斷是否為升序排列的話,只需把if中的小於號換成大於號還即可

 利用這個方法得出的結果是這樣子的:

這就是我們所期望的結果。

接下來就是給出整個代碼:

 

這里要說明一下:

ArrayDemo.printArray方法其實就是一個遍歷數組的方法

為了節省時間就直接調用過來了

 

我們也可以把上面的冒泡排序優化一下,和例子2也是一樣的思路

如圖:

 

 

最后在看一下這兩種方法的耗時:

 

差不多就是這樣子了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM