標籤:簡單選擇排序 時間 好的 else 快速排序 quick 已耗用時間 turn function
一 ,排序
1,冒泡法
冒泡法的核心思想是兩兩比較,如果大小顛倒就置換。冒泡法的時間複雜度是O(n*n)
function maopao_sort($arr){
$len = count($arr);
for($i=0;$i<$len;$i++){
for($j=0;$j<$len-$i-1;$j++){
if($arr[$j]>$arr[$j+1]){
$temp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $temp;
}
}
}
return $arr;
}
2,快速排序法
快速排序法的思想是將待排序的數分成兩組,左邊都小於右邊,然後遞迴,快速排序的平均已耗用時間為θ(nlogn)
function quick_sort($arr){
$len = count($arr);
if($len<=1){
return $arr;
}else{
$key = $arr[0];
$left = array();
$right = array();
for($i=1;$i<$len;$i++){
if($key>=$arr[$i]){
$left[]=$arr[$i];
}else{
$right[]=$arr[$i];
}
}
$left = quick_sort($left);
$right = quick_sort($right);
return array_merge($left,array($key),$right);
}
}
3,選擇排序法
簡單選擇排序的基本思想:第1趟,在待排序記錄r[1]~r[n]中選出最小的記錄,將它與r[1]交換;第2趟,在待排序記錄r[2]~r[n]中選出最小的記錄,將它與r[2]交換;以此類推,第i趟在待排序記錄r[i]~r[n]中選出最小的記錄,將它與r[i]交換,使有序序列不斷增長直到全部排序完畢。
function select_sort($arr){
$len = count($arr);
for($i=0;$i<$len;$i++){
for($j=$i+1;$j<$len;$j++){
if($arr[$i]>$arr[$j]){
$temp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $temp;
}
}
}
return $arr;
}
4,插入排序法
插入排序法的核心思想是,假設第一個數已經排好序,從第二個數開始,從後向前掃面已經排好的序列,找到合適的位置,插入。後面的數全部後移。
function insert_sort($arr){
$len = count($arr);
for($i=1;$i<$len;$i++){
$temp = $arr[$i];
$j = $i-1;
while($j>=0 && $arr[$j]>$temp){
$arr[$j+1]=$arr[$j];
$arr[$j] = $temp;
$j--;
}
}
return $arr;
}
PHP 幾個演算法