陣列的氣泡排序

2022-07-27 06:42:18 字數 2122 閱讀 3538

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

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

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

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

第二次比較:

第三次比較:

第四次比較:

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

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

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

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

例子1:

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

我們看到這個方法:

q:第乙個for迴圈為什麼從1開始,以及為什麼是這個迴圈條件?

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

迴圈條件是由上面的**觀察而出來的,比較輪數是小於這個陣列的長度的

q:第二個for迴圈從為什麼從0開始,以及這個迴圈條件

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

既然我們知道了這個迴圈代表的是比較次數,從上面的**中可以得出這麼乙個結論

交換次數  = 陣列長度 - 當前輪數

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

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

例子2:

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

這是第一次寫出的結果:

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

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

那麼怎麼來判斷這個陣列是否已經排好序了,從而去停止整個迴圈

沒錯,就是然後判斷陣列是否從大到小排好序了呢?

這裡我使用了乙個方法:

我們來看到這個方法:

我們預設這個陣列是循序排序的,所以結果為true

然後開始迴圈:

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

就把結果改為false,並且跳出迴圈

這就是我們判斷陣列是否降序排列的乙個方法,

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

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

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

接下來就是給出整個**:

這裡要說明一下:

arraydemo.printarray方法其實就是乙個遍歷陣列的方法

為了節省時間就直接呼叫過來了

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

如圖:

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

差不多就是這樣子了

陣列的氣泡排序

var ary 4,3,5,2,1 氣泡排序的思想 讓當前項與後一項進行比較,如果當前項大於後一項,兩者交換位置 第一輪比較 拿出陣列的第一項4與後一項3比較,4 3,交換位置 3,4,5,2,1 4 5 不交換位置 3,4,5,2,1 5 2 交換位置 3,4,2,5,1 5 1 交換位置 3,4...

陣列排序 氣泡排序

氣泡排序 氣泡排序 bubble sort 基本思想 兩個數比較大小,較大的數下沉,較小的數冒起來。演算法描述 比較相鄰的元素。如果第乙個比第二個大,就交換它們兩個 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對,這樣在最後的元素應該會是最大的數 針對所有的元素重複以上的步驟,除了最後乙...

陣列,氣泡排序

從鍵盤中任意輸入任意多個數字,即可告訴你最大值和最小值 include void max int str,int n int main 上面得到的是你要輸入的整數的值 下面的函式使用氣泡排序的方式來進行比較的 max a,n return 0 void max int str,int m 這裡你要知...