摘要:一冒泡排序原理對一組數(shù)據(jù),比較相鄰數(shù)據(jù)的大小,將值小數(shù)據(jù)在前面,值大的數(shù)據(jù)放在后面。通過以上五輪排序,若干次比較,我們有理由推斷出一個(gè)結(jié)論對于一個(gè)長度為的數(shù)組,我們需要排序輪,每輪要比較次。
一、冒泡排序
原理:對一組數(shù)據(jù),比較相鄰數(shù)據(jù)的大小,將值小數(shù)據(jù)在前面,值大的數(shù)據(jù)放在后面。 (以下都是升序排列,即從小到大排列)
舉例說明: $arr = array(6, 3, 8, 2, 9, 1);
$arr 有6個(gè)數(shù)據(jù),按照兩兩比較大小如下,注意 比較輪數(shù) 和 每輪比較次數(shù)
第一輪排序:
第一次比較 6和3比較 結(jié)果:3 6 8 2 9 1
第二次比較 6和3比較 結(jié)果:3 6 8 2 9 1
第三次比較 8和2比較 結(jié)果:3 6 2 8 9 1
第四次比較 8和9比較 結(jié)果:3 6 2 8 9 1
第五次比較 9和1比較 結(jié)果:3 6 2 8 1 9
第一輪比較總結(jié):1.排序第1輪、比較5次,沒有獲得從小到大的排序 2.因?yàn)槊看伪容^都是大數(shù)往后靠,所以比較完成后,可以確定大數(shù)排在最后(9 已經(jīng)冒泡冒出來了,下輪比較可以不用比較了 )
第二輪排序:
第一次比較 3和6比較 結(jié)果:3 6 2 8 1 9
第二次比較 6和2比較 結(jié)果:3 2 6 8 1 9
第三次比較 6和8比較 結(jié)果:3 2 6 8 1 9
第四次比較 8和1比較 結(jié)果:3 2 6 1 8 9
第二輪比較總結(jié):1.排序第2輪、比較4次,沒有獲得從小到大的排序 2.冒泡出了 8,下輪不用比較8 了
第三輪排序:
第一次比較 3和2比較 結(jié)果:2 3 6 1 8 9
第二次比較 3和6比較 結(jié)果:2 3 6 1 8 9
第三次比較 6和1比較 結(jié)果:2 3 1 6 8 9
第三輪比較總結(jié):1.排序第3輪、比較3次,沒有獲得從小到大的排序 2.冒泡出了 6,下輪不用比較6 了
第四輪排序:
第一次比較 2和3比較 結(jié)果:2 3 1 6 8 9
第二次比較 3和1比較 結(jié)果:2 1 3 6 8 9
第四輪比較總結(jié):1.排序第4輪、比較2次,沒有獲得從小到大的排序 2.冒泡出了 3,下輪不用比較3 了
第五輪排序:
第一次比較 2和1比較 結(jié)果:1 2 3 6 8 9
第五輪比較總結(jié):1.排序第5輪、比較1次,沒有獲得從小到大的排序 2.冒泡出了 2,由于還剩一個(gè)1,不用再比較了,至此通過5輪排序,完成整個(gè)排序。
通過以上五輪排序,若干次比較,我們有理由推斷出一個(gè)結(jié)論:
對于一個(gè)長度為N的數(shù)組,我們需要排序 N-1 輪,每 i 輪 要比較 N-i 次。對此我們可以用雙重循環(huán)語句,外層循環(huán)控制循環(huán)輪次,內(nèi)層循環(huán)控制每輪的比較次數(shù)。
代碼實(shí)現(xiàn):
$arr=[11,3,56,62,21,66,32,78,36,76,39,88,34];
//該層循環(huán)控制 需要冒泡的輪數(shù)
for ($i=1; $i < count($arr); $i++) {
//該層循環(huán)用來控制每輪 冒出一個(gè)數(shù) 需要比較的次數(shù) for ($j=0; $j < count($arr) - $i; $j++) { if($arr[$j] > $arr[$j+1]) { $tmp = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $tmp; } }
}
var_dump($arr);
參考 :https://www.cnblogs.com/wgq12...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/29231.html
摘要:而在證明算法是正確的基礎(chǔ)上,第二步就是分析算法的時(shí)間復(fù)雜度。算法的時(shí)間復(fù)雜度反映了程序執(zhí)行時(shí)間隨輸入規(guī)模增長而增長的量級,在很大程度上能很好反映出算法的優(yōu)劣與否。 showImg(https://segmentfault.com/img/remote/1460000016451712?w=800&h=341); 前言 雖然工作中,你覺得自己并沒有涉及到算法這方面的東西,但是算法是程序的...
摘要:數(shù)據(jù)結(jié)構(gòu)常見數(shù)據(jù)結(jié)構(gòu)數(shù)組是最簡單而且應(yīng)用最廣泛的數(shù)據(jù)結(jié)構(gòu)特征使用連續(xù)內(nèi)存空間來存儲存放相同類型或著衍生類型的元素?cái)?shù)組比較特別,可以存放八種數(shù)據(jù)類型通過下標(biāo)來訪問集合特征保存不重復(fù)的元素字典特征就是關(guān)聯(lián)數(shù)組,以形式存儲棧,與隊(duì)列相似特征存儲數(shù) 數(shù)據(jù)結(jié)構(gòu) 常見數(shù)據(jù)結(jié)構(gòu) Array 數(shù)組是 最簡單 而且 應(yīng)用最廣泛 的數(shù)據(jù)結(jié)構(gòu) 特征: 1、使用連續(xù)內(nèi)存空間來存儲 2、存放相同類型或著衍生類型...
摘要:冒泡排序法該層循環(huán)控制需要冒泡的輪數(shù)該層循環(huán)用來控制每輪冒出一個(gè)數(shù)需要比較的次數(shù)聲明一個(gè)臨時(shí)變量
摘要:尋找非零元素?cái)?shù)組中所有元素排列組合后的最大值待排序數(shù)組排序方法參數(shù)校驗(yàn)排序算法快速排序冒泡排序拼接用例測試這里只對快速排序方法使用組測試用例并列舉如下。 首發(fā)于 樊浩柏科學(xué)院 問題敘述:將一個(gè)非負(fù)元素?cái)?shù)組中的所有元素排列組合在一起,找出值最大的那個(gè)排列情況。例如 [0, 9, 523, 94, 10, 4],排列組合后值最大數(shù)為:9945234100。 showImg(https:/...
摘要:良好的排序算法具有進(jìn)行最少的比較和交換的特征。冒泡排序是一個(gè)基于比較的排序算法,被認(rèn)為是效率最低的排序算法之一。現(xiàn)在讓我們使用實(shí)現(xiàn)冒泡排序算法。插入排序到目前為止,我們已經(jīng)看到了兩種基于比較的排序算法。 預(yù)警 本文適合對于排序算法不太了解的新手同學(xué)觀看,大佬直接忽略即可。因?yàn)榭紤]到連貫性,所以篇幅較長。老鐵們看完需要大概一個(gè)小時(shí),但是從入門到完全理解可能需要10個(gè)小時(shí)(哈哈哈,以我自己...
閱讀 1416·2021-10-08 10:05
閱讀 3060·2021-09-26 10:10
閱讀 883·2019-08-30 15:55
閱讀 504·2019-08-26 11:51
閱讀 441·2019-08-23 18:10
閱讀 3849·2019-08-23 15:39
閱讀 658·2019-08-23 14:50
閱讀 767·2019-08-23 14:46