冒泡法原理及實現

2021-08-31 09:57:47 字數 1459 閱讀 2767

第一次接觸排序演算法,簡單寫一下實現原理。

先看一道例題:

使用者輸入十個資料,將資料從大到小輸出。

輸入樣例 1 30 23 56 0 199 -23 45 78 -200

輸出樣例 -200 -23 0 1 23 30 45 56 78 199

這裡使用冒泡法。別的排序目前我也不太會

**示例:

#includeint main(void)

for(i=0;i<10;i++)

printf("%d ",num[i]);

return 0;

}

問題來了問什麼叫冒泡

畫了乙個示意圖,大概是這麼個意思(觀察過氣泡在水中上公升的同學可能比較明白,這個問題應該是和壓力有關?!)

經過一次迴圈已經能看出一些端倪。最大數字經過一次迴圈已經放置到陣列的最後一位,這裡就不贅述後面的相似迴圈了,相信讀者已經能根據第一次迴圈想到後面的情況了。

下面我們來詳細分析一下**:

for(i=0;i<10-1;i++)

第乙個迴圈很簡單,就是要迴圈n-1次,可能有人會問,為什麼是n-1次?因為每次迴圈都會把當前迴圈中的最大一位放到右端,在第n-1次放完後,陣列最左端的數字已經是最小的,不需要n次迴圈。

for(j=0;j<10-i-1;j++)

第二個迴圈也很簡單,迴圈n-i-1次,為什麼是n-i-1?同上,右端經過一次比較就會替換成最大值,每次迴圈放置乙個當前迴圈的最大值,所以迴圈完全不必要進行10次,減去已經放好的值的數量(執行一次放乙個,執行i次就是i個)可以提高程式執行的速度。

if(num[j]>num[j+1])

第二個迴圈中巢狀了乙個if條件用於實現程式的關鍵,交換。

如果前乙個值大於後乙個值,就交換他們,這裡注意,不能直接換值,

num[j]=num[j+1];

num[j+1]=num[j];

雖然我相信很少人會犯這種低階錯誤。但是還是要解釋一下這裡換值的實現方式:

可以想象如下場景,a杯子裝有可樂,b杯子裝有雪碧,我們要交換為a杯子裝雪碧,b杯子裝可樂。直接換是不可能的,相信讀者已經能想到了,在拿乙個新杯子。讓可樂先裝在新杯子裡,再把a杯子裡裝上b中的雪碧,這時b杯子已經空出來了,把新杯子裡的可樂裝到b杯子中,就能完成。

這裡換值的操作完全與上面的情景相同,temp就是我們拿來的新杯子。

for(i=0;i<10;i++)

printf("%d ",num[i]);

最後的迴圈負責列印結果,這個沒什麼好說的。

這裡也可以考慮一下如何讓程式降序排列。

2018/11/9建立

2018/12/9修改

氣泡排序原理及實現

氣泡排序就是每次將重的泡泡下沉,輕的泡泡上浮。通過一次次反覆的操作,實現排序目的。下面看一下冒泡的實現 public class test bubblesort data for int i 0 isystem.out.print data i private static void bubbles...

冒泡法排序原理

第一 在a 0 到a n 1 的範圍內,依次比較兩個相鄰元素的值 若a j a j 1 則交換與,j的值取0,1,2.n 2 經過 這樣一趟冒泡,就把這n個數中最大的數放到a n 1 中 第二 再對a 0 到a n 2 的範圍內再進行一趟冒泡,又將該範 圍內的最大值換到a n 2 中 第三 依次進行...

彙編實現冒泡法排序及優化

冒泡法排序 氣泡排序的基本思想是,對相鄰的元素進行兩兩比較,順序相反則進行交換,這樣,每一趟會將最小或最大的元素 浮 到頂端,最終達到完全有序。但是這種冒泡法排序卻有很大的弊端 可以看見在第一次排序後雖然最大的數字被移動到了最右的位置,但是這輪排序對其他的數字並沒有造成有益的影響,甚至第二大的數字8...