php氣泡排序詳解
function bubblesort($str)
//定義乙個名為bubblesort的函式,它有乙個引數叫$str,這個引數必須是乙個陣列,這個陣列裡包含需要排序的一系列字元。
for ($i=0;$i
//第一層迴圈,外層迴圈,由於氣泡排序的原理為,每次都找最小(或每次都找最大,本例是演示每次都找最小的情況)的那個字元,找出乙個最小(「大」)的字元算一次迴圈
for ($j=count($str)-2;$j>=$i;$j--)
//內層迴圈,本次迴圈控制找最小(「大」)數的操作,由於每次要找出最大的數,必須拿乙個數和每乙個數對比,所以也是乙個內層的迴圈操作
if($str[$j+1]
//比較,是$j+1位置的字元大,還是$j位置的字元比較大,如果$j位置的字元比較大,那麼交換$str[$j+1]和$str[$j]以保證排列在前面的字元更小
$tmp = $str[$j+1]; //交換兩個位置的東西,需要三個空位才能完成,就像交換一杯可樂和一杯牛奶需要另乙個空杯子一樣,$tmp可以說就是空杯子
$str[$j+1]=$str[$j];//類似,有一杯牛奶,一杯可樂,我們想用牛奶杯裝可樂,可樂杯裝牛奶的話,就得進行這樣的操作……
$str[$j]=$tmp;//整個交換的過程可以描述為:先將牛奶倒入空杯,再將可樂倒入牛奶杯,然後再將原來空杯裡的牛奶倒入可樂杯
}//內層迴圈每執行一次,就會多找出乙個「最小」的字元(除了前面迴圈中已經找過了的)
}//陣列裡有n個字元的話,迴圈就重複n-1次,這樣才能完成排序
return $str; //將排序後的結果返回,返回後跳出函式體,$str變數在記憶體中消失,而bubblesort($str)的值就是$str所返回的值
}//函式體定義完成標誌我們稱之為 end of function bubblesort($str)
$str = array(3,6,1,5,9,0,4,6,11);//組出乙個存放隨機序列的若干數字的陣列
print_r(bubblesort($str)); //呼叫函式體
┃基本原理┃:兩兩比較待排序資料元素的大小,發現兩個資料元素的次序相反時即進行交換,直到沒有反序的資料元素為止。
┃演算法過程┃:設想被排序的陣列$arr[0..n]垂直豎立,將每個資料元素看作有重量的氣泡,根據輕氣泡不能在重氣泡之下的原則,
從下往上掃瞄陣列$arr時,凡掃瞄到違反本原則的輕氣泡,就使其向上"漂浮",如此反覆進行,直至最後任何兩個氣泡都是輕者在上,重者在下為止。
//氣泡排序(一維陣列)
function bubble_sort($array)
$count = count($array);
if ($count <= 0) return false;
for($i=0; $i
for($j=$count-1; $j>$i; $j--)
//如果後乙個元素小於前乙個,則調換位置
if ($array[$j] < $array[$j-1])
$tmp = $array[$j];
$array[$j] = $array[$j-1];
$array[$j-1] = $tmp;
return $array;
//使用例項
$arr = array(49, 38, 65, 97, 76, 13, 27);
$arr = bubble_sort($arr);
print_r($arr);
排序實現過程如下:
49 38 65 97 76 13 27
38 49 6597 76 13 27 比較第1個和第2個數,小的放前邊,大的放後邊
38 49 65 97 76 13 27 比較第2個和第3個數,小的放前邊,大的放後邊
38 49 65 97 76 13 27 比較第3個和第4個數,小的放前邊,大的放後邊
38 49 65 76 97 13 27 比較第4個和第5個數,小的放前邊,大的放後邊
38 49 65 76 13 97 27 比較第5個和第6個數,小的放前邊,大的放後邊
38 49 65 76 13 27 97 比較第6個和第7個數,小的放前邊,大的放後邊
至此,第一趟比較結束,得到以下排序:
38 49 65 76 13 27 97
然後按照第一趟排序的方法繼續比較,直到完成排序。
//快速排序(陣列排序)
function quick_sort($array)
if (count($array) <= 1) return $array;
$key = $array[0]; //把陣列的第乙個元素作為關鍵資料
$left_arr = array();
$right_arr = array();
for ($i=1; $i
if ($array[$i] <= $key)
$left_arr = $array[$i];
else
$right_arr = $array[$i];
$left_arr = quick_sort($left_arr);
$right_arr = quick_sort($right_arr);
return array_merge($left_arr, array($key), $right_arr);
$arr = array(49, 38, 65, 97, 76, 13, 27);
$aresule = quick_sort($arr);
print_r($aresule);
快速查詢演算法過程:
設要排序的陣列是a[0]……a[n-1],首先任意選取乙個資料(通常選用第乙個資料)作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。一趟快速排序的演算法是:
1)設定兩個變數i、j,排序開始的時候:i=1,j=n-1;
2)以第乙個陣列元素作為關鍵資料,賦值給x,即 x=a[0];
3)從j開始向前搜尋,即由後開始向前搜尋(j=j-1),找到第乙個小於x的值,讓該值與x交換(找到就行.找到後i大小不變);
4)從i開始向後搜尋,即由前開始向後搜尋(i=i+1),找到第乙個大於x的值,讓該值與x交換(找到就行.找到後j大小不變);
5)重複第3、4步,直到 i=j; (3,4步是在程式中沒找到時候j=j-1,i=i+1。找到並交換的時候i, j指標位置不變。另外當i=j這過程一定正好是i+或j+完成的最後另迴圈結束)
49 38 65 97 76 13 27 這裡49為關鍵資料
27 38 65 97 76 13 49 從後往前查詢找第1個小於關鍵資料49的數27並與49交換位置
27 38 49 97 76 13 65 從前往後查詢找第1個大於關鍵資料49的數65並與49交換位置
27 38 13 97 76 49 65 從後往前查詢找第1個小於關鍵資料49的數13並與49交換位置
27 38 13 49 76 97 65 從前往後查詢找第1個大於關鍵資料49的數97並與49交換位置
至此,49到了這組資料的中間位置,不能再繼續查詢下去。然後將該組資料分成以下三部分
49 和分別取出關鍵資料27、76按照以上方法排序
27 38 13
13 38 27 從後往前查詢找第1個小於關鍵資料27的數13並與27交換位置
13 27 38 從前往後查詢找第1個大於關鍵資料27的數38並與27交換位置
到此,關鍵資料27到了中間位置,查詢結束。
76 97 65 從後往前查詢找第1個小於關鍵資料76的數65並與76交換位置
65 76 97 到此,關鍵資料76到了中間位置,查詢結束。
最後三部分資料組合在一起,即為快速查詢的結果:
13 27 38 49 65 76 97
//插入排序(一維陣列)function insert_sort($arr) } return $arr;}●選擇排序(selection sort)的基本思想是:每一趟從待排序的記錄中選出關鍵字最小的記錄,順序放在已排好序的子檔案的最後,直到全部記錄排序完畢。//選擇排序(一維陣列)function select_sort($arr) } } return $arr;}氣泡排序的基本思想是:兩兩比較待排序記錄的關鍵字,發現兩個記錄的次序相反時即進行交換,直到沒有反序的記錄為止。//氣泡排序(一維陣列)function bubble_sort($array) } } return $array;} ●快速排序實質上和氣泡排序一樣,都是屬於交換排序的一種應用。所以基本思想和上面的氣泡排序是一樣的。//快速排序(一維陣列)function quick_sort($array) $left_arr = quick_sort($left_arr); $right_arr = quick_sort($right_arr); return array_merge($left_arr, array($key), $right_arr);}
php氣泡排序和快排
function bubble sort array for i 0 i count i return array function quick sort array rightarr array leftarr array key array 0 for i 1 i count i else le...
php四排序 氣泡排序
演算法和資料結構是乙個程式設計工作人員的內功,技術牛不牛,一般都會看這兩點。作為php程式設計師,提公升技能當然也得學習演算法。下面介紹四種入門級排序演算法 氣泡排序 選擇排序 插入排序 快速排序。一 氣泡排序 原理 對一組資料,比較相鄰資料的大小,將值小資料在前面,值大的資料放在後面。以下都是公升...
php 氣泡排序
基本概念是 依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。重複以上過程,仍從第一對數開始比較 因為可能由於第2個數和第3個數的交換,使得第1個...