1. 程式人生 > >JAVA-初步認識-第五章-數組-常見操作-冒泡排序

JAVA-初步認識-第五章-數組-常見操作-冒泡排序

感覺 位置 最大 開始 解法 r語 內部 最終 控制

一. 冒泡排序

這裏介紹了另一種排序的方法,冒泡排序法。選擇排序法比較接近人們正常的思維,一個數據和剩下的說有數據比較。

技術分享

冒泡排序法是臨近的數據間進行比較,大的數據就調到右側,角標1-2的數據對比,角標2-3的數據對比......

無論是選擇排序還是冒泡排序都是先求最值。

冒泡排序法,是一輪一輪地進行左右兩側的數據進行對比。第一輪將所有數據中最大的數據移動到了最右側,這種操作的核心在於:一直保證大的數據在右側,那麽經過不斷地對調,最大的數據肯定在最後一位中。第一輪將最大的數據移動到了最右邊,接下來相同的操作移動次大值到次右位.....

這樣從左到右,得到的是從小到大的數據排列。也可以從右邊開始,兩兩比較,大的值放左側,一直往左邊進行比較,從而保證最左側為最大值,最終得到的從大到小的數據排列。

如果拋開技術層面不談的話,一定要保證最值要位於兩兩比較的前進方向的位置上。

技術分享

這裏依舊采用的是大圈套小圈,怎麽分析。

自己的初步分析:所有的操作都是建立在數組中數據的基礎上的,無論是操作的次數還是操作的數據,這一點是要明確的。本題中,數據的個數是6個。先不管遍歷時進行了什麽操作,總共進行了5次遍歷,分別是:0-5遍歷,0-4遍歷,0-3遍歷,0-2遍歷,0-1遍歷。6個數,進行了5次遍歷,定義一個變量來控制遍歷的次數。每次遍歷的內部,也進行了操作。比如說0-5遍歷時,是0-1對比,1-2對比,2-3對比,3-4對比,4-5對比,總共進行了5次對比操作。第2次遍歷,進行了4次對比;第3次遍歷,進行了3次對比;也就是說每次遍歷裏面的對比次數也在變化,也需要定義一個變量來控制對比的次數,至於怎麽對比,怎麽操作先不管。→確定的數組,就決定了確定次數的遍歷,也會確定遍歷裏面對比的次數。這個有點反斜三角的意思,一個變量控制行數,一個變量控制列數,由於列數在變化,導致列變量的循環次數還要借助行變量來控制。

技術分享

技術分享

技術分享

經過視頻講解後,也能寫出源代碼。感覺這是脫胎於for語句嵌套,形成反斜三角的題目。

技術分享

視頻接著講解了從右邊往左邊進行的冒泡排序法,我們自己也嘗試一下,(本質上還是反斜三角的另一種寫法)

技術分享

視頻的解法,雖然結果是正確的,但是做法仍舊是從角標0開始,將較大的值往右移動。我以為的從右側開始冒泡,是將較小的值往左移,畢竟從右邊開始移動。

技術分享

JAVA-初步認識-第五章-數組-常見操作-冒泡排序