php语言冒泡法,冒泡排序法(php)
/**
*?排序算法:使一個(gè)數(shù)列的值按照某個(gè)規(guī)則進(jìn)行排序的算法,也可以說(shuō)是用于確定一個(gè)數(shù)列中每個(gè)值的次序位置的算法。
*?????在上述定義中涉及數(shù)列中每個(gè)成員的值和其對(duì)應(yīng)的次序位置(以下簡(jiǎn)稱(chēng)次位,次位是一個(gè)成員的屬性,可以看做次序,權(quán),位置,編號(hào)等),
*?將一個(gè)數(shù)列與其進(jìn)行排序后的新數(shù)列對(duì)比,其對(duì)應(yīng)值的次位(或者說(shuō)對(duì)應(yīng)次位的值,也可以說(shuō)值與次位的對(duì)應(yīng)關(guān)系)會(huì)按照排序規(guī)則發(fā)生變化(除非原數(shù)列已經(jīng)完全符合排序規(guī)則),
*?所以說(shuō),排序算法的實(shí)質(zhì)也就是對(duì)數(shù)列成員值與次位的對(duì)應(yīng)關(guān)系的調(diào)整。
*?按從左到右,從前到后,對(duì)應(yīng)次位首尾。
*?冒泡排序法:默認(rèn)次位按照排序規(guī)則從左到右排列,從首位(或末位)開(kāi)始依次取得排序后該次位對(duì)應(yīng)的值。
*?快速排序法:將數(shù)列第一個(gè)單元作為界限,按排序規(guī)則將數(shù)列剩余成員分為兩個(gè)數(shù)列,每個(gè)數(shù)列遞歸重復(fù)上述操作(直至剩余成員為1或0),將遞歸的每一層都按照?左側(cè)數(shù)列?界線成員?右側(cè)數(shù)列?的次序重組為一個(gè)數(shù)列。
*
*/
/**
*?冒泡排序
*?形象闡述:
就像是深水中的泡泡上浮的過(guò)程(假設(shè)永遠(yuǎn)到不了水面,即深度絕對(duì)足夠泡泡縱向排列次序達(dá)到穩(wěn)定),
大的泡泡總會(huì)比小的泡泡上浮速度快,從而最終狀態(tài)為由下至上泡泡依次變大。
*?過(guò)程闡述:
以最下面泡泡為第一位,從第一位泡泡起,與上一個(gè)泡泡比較大小,如果大的話(huà)就交換位置(否則不交換),
然后用現(xiàn)狀態(tài)的第二位繼續(xù)與上一位比較,判斷是否交換,依次直到與最上面的泡泡比較后,就確定了最大的泡泡。
然后再?gòu)牡谝晃黄?#xff0c;向上比較與交換,直到確定第二大的泡泡(此時(shí)比較的次數(shù)已經(jīng)減一,無(wú)需與最大再比較了)。
重復(fù)上述操作,直到所有位都確定時(shí),排序完成。
*?概念闡述:
凡是通過(guò)比較,逐個(gè)確定排序后每個(gè)位置上的值的排序方法,可以稱(chēng)之為冒泡排序法
*?注意點(diǎn):
冒泡排序可以對(duì)數(shù)列進(jìn)行升序或降序排列,由比較條件確定
因?yàn)槭侵饌€(gè)確定排序后每個(gè)位置上的值,所以確定次序又可分為從前到后和從后到前兩種,由循環(huán)確定。
無(wú)論哪種寫(xiě)法,泡泡個(gè)數(shù)(即數(shù)列成員個(gè)數(shù)或者說(shuō)數(shù)組長(zhǎng)度)都是需要知道的。
*?以下給出?php?語(yǔ)言實(shí)現(xiàn)的兩種實(shí)現(xiàn)
*
*/
//?結(jié)果是升序,且結(jié)果是從后到前依次確定的,先確定的是最大的值
function?bubbleSort($numbers){
$len?=?count($numbers);
for($i?=?0;?$i?
for($j?=?0;?$j?
if($numbers[$j]?>?$numbers[$j?+?1]){????//??比較的符號(hào)決定了結(jié)果的升降序。比較的是相鄰兩個(gè)位
$temp?=?$numbers[$j];???????????????//??符合交換條件,對(duì)兩個(gè)值進(jìn)行交換,這里用了三步,在?php?中也有別的方法對(duì)兩個(gè)值進(jìn)行交換
$numbers[$j]?=?$numbers[$j?+?1];
$numbers[$j?+?1]?=?$temp;
}
}
}
return?$numbers;
}
//?$num?=?array(20,?40,?60,?80,?30,?70,?90,?10,?50,?0);
//?var_dump(bubbleSort($num));
//?一直以為下面這種也是冒泡排序,其實(shí)不是的,不過(guò)是個(gè)變種,思想不一樣
// 結(jié)果是升序,且結(jié)果是從前到后依次確定的,先確定的是最小的值
function?anotherSort($numbers){
$len?=?count($numbers);
for($i?=?0;?$i?
for($j?=?$i?+?1;?$j?
if($numbers[$i]?>?$numbers[$j]){????????//??比較的符號(hào)決定了結(jié)果的升降序。比較的是待確定值的位置上的值與所有剩余的自由值。
$temp?=?$numbers[$i];???????????????//??符合交換條件,對(duì)兩個(gè)值進(jìn)行交換,這里用了三步,在?php?中也有別的方法對(duì)兩個(gè)值進(jìn)行交換
$numbers[$i]?=?$numbers[$j];
$numbers[$j]?=?$temp;
}
}
}
return?$numbers;
}
//?$num?=?array(20,?40,?60,?80,?30,?70,?90,?10,?50,?0);
//?var_dump(bubbleSort_1($num));
總結(jié)
以上是生活随笔為你收集整理的php语言冒泡法,冒泡排序法(php)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: php表达式生成工具,thinkPHP5
- 下一篇: 上拉加载 php,php+jquery