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