C语言冒泡排序算法详解
冒泡排序算法,C語(yǔ)言冒泡排序算法詳解 (biancheng.net)
冒泡排序是最簡(jiǎn)單的排序方法,理解起來(lái)容易。雖然它的計(jì)算步驟比較多,不是最快的,但它是最基本的,初學(xué)者一定要掌握。
冒泡排序的原理是:從左到右,相鄰元素進(jìn)行比較。每次比較一輪,就會(huì)找到序列中最大的一個(gè)或最小的一個(gè)。這個(gè)數(shù)就會(huì)從序列的最右邊冒出來(lái)。
以從小到大排序?yàn)槔?#xff0c;第一輪比較后,所有數(shù)中最大的那個(gè)數(shù)就會(huì)浮到最右邊;第二輪比較后,所有數(shù)中第二大的那個(gè)數(shù)就會(huì)浮到倒數(shù)第二個(gè)位置……就這樣一輪一輪地比較,最后實(shí)現(xiàn)從小到大排序。
比如對(duì)下面這個(gè)序列進(jìn)行從小到大排序:
90? 21? 132? -58? 34
第一輪:1) 90 和 21比,90>21,則它們互換位置:
21? 90? 132? -58? 34
2) 90 和 132 比,90<132,則不用交換位置。3)132 和 –58 比,132>–58,則它們互換位置:
21? 90? -58? 132? 34
4)132 和 34 比,132>34,則它們互換位置:21? 90? -58? 34? 132
到此第一輪就比較完了。第一輪的結(jié)果是找到了序列中最大的那個(gè)數(shù),并浮到了最右邊。比較時(shí),每輪中第 n 次比較是新序列中第 n 個(gè)元素和第 n+1 個(gè)元素的比較(假如 n 從 1 開始)。
第二輪:
1) 21 和 90 比,21<90,則不用交換位置。
2) 90 和 –58 比,90>–58,則它們互換位置:
21? -58? 90? 34? 132
3) 90 和 34 比,90>34,則它們互換位置:21? -58? 34? 90? 132
到此第二輪就比較完了。第二輪的結(jié)果是找到了序列中第二大的那個(gè)數(shù),并浮到了最右邊第二個(gè)位置。第三輪:
1) 21 和 –58 比,21>–58,則它們互換位置:
-58? 21? 34? 90? 132
2) 21 和 34 比,21<34,則不用交換位置。
到此第三輪就比較完了。第三輪的結(jié)果是找到了序列中第三大的那個(gè)數(shù),并浮到了最右邊第三個(gè)位置。
第四輪:
1) –58 和 21 比,–58<21,則不用交換位置。
至此,整個(gè)序列排序完畢。從小到大的序列就是“–58 21 34 90 132”。從這個(gè)例子中還可以總結(jié)出,如果有 n 個(gè)數(shù)據(jù),那么只需要比較 n–1 輪。而且除了第一輪之外,每輪都不用全部比較。因?yàn)榻?jīng)過(guò)前面輪次的比較,已經(jīng)比較過(guò)的輪次已經(jīng)找到該輪次中最大的數(shù)并浮到右邊了,所以右邊的數(shù)不用比較也知道是大的。
下面寫一個(gè)程序:
輸出結(jié)果是:
2500 900 543 532 76 56 43 35 34 32 3 2 -58 -70 -234
程序中,為什么每輪比較的次數(shù)是 j<n–1–i,而不是 j<n–1?
因?yàn)槊芭菖判蛴幸粋€(gè)特點(diǎn),這個(gè)程序是從大到小排序,所以第一輪排序以后,最小的數(shù)就會(huì)浮到最右面;第二輪排序以后,第二小的數(shù)會(huì)浮到倒數(shù)第二個(gè)位置;第三輪排序以后,第三小的數(shù)會(huì)浮到倒數(shù)第三個(gè)位置……也就是說(shuō),排序多少輪,就有多少個(gè)數(shù)字已經(jīng)按排序要求排好了,它們不需要再比較。寫 j<n–1 也可以,只不過(guò)程序在執(zhí)行時(shí)多做了許多無(wú)用功。
總結(jié)
以上是生活随笔為你收集整理的C语言冒泡排序算法详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 俞军老师:适合产品经理的10本书 | 2
- 下一篇: 华南理工计算机电路基础试题,华南理工计算