程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> php實現冒泡排序和快速排序

php實現冒泡排序和快速排序

編輯:PHP綜合

/******
1)冒泡排序:兩兩交換數值,最小的值在最左邊,就如最輕的氣泡在最上邊。
2)對整列數兩兩交換一次,最小的數在最左邊,每次都能得一個在剩下的數中的最小 的數,“冒”出來的數組成一個有序區間,剩下的值組成一無序區間,且有序區間中每一元素值都比無序區間的小。
3)快速排序:基准數,左右二個數組,遞歸調用,合並。
4)插入排序:排序區間分成二部分,左邊有序,右邊無序,從右區間取第一個元素插入左區間,若此元素比左邊區間最右邊的元素大,留在原處,若此元素比左 邊區間最右邊的元素小,則插在最右邊5)元素的原位置,同時最右邊元素右移一位,計算器減一,重新和前面的元素比較,直到前面的元素比要插入元素小為止,重復 上述步驟。
6)注意區間端點值的處理,及數組的第一個元素下標為0.
***/


$a=array('3','8','1','4','11','7'); print_r($a); $len = count($a); //從小到大 for($i=1;$i<$len;$i++) { for($j=$len-1;$j>=$i;$j--) if($a[$j]<$a[$j-1]) {//如果是從大到小的話,只要在這裡的判斷改成if($b[$j]>$b[$j-1])就可以了 $x=$a[$j]; $a[$j]=$a[$j-1]; $a[$j-1]=$x; } } print_r($a); //另一種方法 從小到大 $b=array('4','3','8','9','2','1'); $len=count($b); for($k=1;$k<$len;$k++) { for($j=$len-1,$i=0;$i<$len-$k;$i++,$j--) if($b[$j]<$b[$j-1]){ //如果是從大到小的話,只要在這裡的判斷改成if($b[$j]>$b[$j-1])就可以了 $tmp=$b[$j]; $b[$j]=$b[$j-1]; $b[$j-1]=$tmp; } print_r($b); echo " "; } //下面的這個執行效率更高 function maopao($arr) { $len = count($arr); for($i=1; $i<$len; $i++)//最多做n-1趟排序 { $flag = false; //本趟排序開始前,交換標志應為假 for($j=$len-1;$j>=$i;$j--) { if($arr[$j]<$arr[$j-1])//交換記錄 {//如果是從大到小的話,只要在這裡的判斷改成if($arr[$j]>$arr[$j-1])就可以了 $x=$arr[$j]; $arr[$j]=$arr[$j-1]; $arr[$j-1]=$x; $flag = true;//發生了交換,故將交換標志置為真 } } if(! $flag)//本趟排序未發生交換,提前終止算法 return $arr; } } $shuz = array('2','4','1','8','5'); $bb = maopao($shuz); print_r($bb); // 快速排序 function kuaisu($arr){ $len = count($arr); if($len <= 1){ return $arr; } $key = $arr[0]; $left_arr = array(); $right_arr = array(); for($i=1; $i<$len;$i++){ if($arr[$i] <= $key){ $left_arr[] = $arr[$i]; }else{ $right_arr[] = $arr[$i]; } } $left_arr = kuaisu($left_arr); $right_arr = kuaisu($right_arr); return array_merge($left_arr, array($key), $right_arr); } $arr = array(23,98,54,2,9,62,34); print_r(kuaisu($arr));

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved