首先咱們要理解排序的定義:數組
冒泡排序(Bubble sort):相鄰的兩個數逐個的作比較,若是前一個數比後一個數小那麼就交換過來,當第一輪比較完畢以後最小的值必定在末尾優化
咱們能夠先畫出以一張圖:
spa
數組兩個相鄰的值去比較後面的數大於前面的數就會去交換,所以每輪比較後最小值都會出如今此次比較的最後一位3d
第二次比較:blog
第三次比較:排序
第四次比較:索引
好了,上面就是咱們模擬計算機去比較一個數組;既然咱們知道了如何去比較數組for循環
那麼咱們該如何去編寫代碼,讓計算機會自動去比較呢?循環
這就要發揮咱們本身的創造能力以及獨特的思惟,言歸正傳,咱們到底該如何寫出這個冒泡排序呢?遍歷
接下來就由我就來簡單的演示一下吧!
例子1:
這個就是最簡單的交換方法
咱們看到這個方法:
Q:第一個for循環爲何從1開始,以及爲何是這個循環條件?
A:從1開始是由於外層循環表明的是比較輪數,不可能有第0輪這個東西把
循環條件是由上面的表格觀察而出來的,比較輪數是小於這個數組的長度的
Q:第二個for循環從爲何從0開始,以及這個循環條件
A:由於第二個循環表明的是每一輪比較的次數,從0開始是也表明要交換的索引
既然咱們知道了這個循環表明的是比較次數,從上面的表格中能夠得出這麼一個結論
交換次數 = 數組長度 - 當前輪數
由於是從0開始的因此就要小於這個值,這就是咱們的循環條件
最後if中的就好理解了加入後一個索引的數大於當前索引數,就去交換這兩個數。
例子2:
利用求極值的思路去作冒泡排序
這是第一次寫出的結果:
其實咱們發現這個數組其實在第5行的時候就交換好了
但是程序並不會所以停下來,而後繼續交換從而獲得了意外的結果
那麼怎麼來判斷這個數組是否已經排好序了,從而去中止整個循環
沒錯,就是而後判斷數組是否從大到小排好序了呢?
這裏我使用了一個方法:
咱們來看到這個方法:
咱們默認這個數組是循序排序的,因此結果爲true
而後開始循環:
假若有前面索引的數小於後面索引數,就說明這個數組不是降序排列的
就把結果改成false,而且跳出循環
這就是咱們判斷數組是否降序排列的一個方法,
若是判斷是否爲升序排列的話,只需把if中的小於號換成大於號還便可
利用這個方法得出的結果是這樣子的:
這就是咱們所指望的結果。
接下來就是給出整個代碼:
這裏要說明一下:
ArrayDemo.printArray方法其實就是一個遍歷數組的方法
爲了節省時間就直接調用過來了
咱們也能夠把上面的冒泡排序優化一下,和例子2也是同樣的思路
如圖:
最後在看一下這兩種方法的耗時:
差很少就是這樣子了