<?php/*** created by phpstorm.
* user: 63448
* date: 2018/5/5
* time: 22:42
*/$arr
= [3,1
,13,5
,7,11
,2,4
,14,9
,150,6
,12,10
,8];
// 氣泡排序
/*** 思路分析:在要排序的一組數中,對當前還未排好的序列,從前往後對相鄰的兩個數依次進行比較和調整,
* 讓較大的數往下沉,較小的往上冒。即,每當兩相鄰的數比較後發現它們的排序與排序要求相反時,
* 就將它們互換。**實現:
*/functionbubblesort
($arr) }
}return$arr;}
var_dump(bubblesort(
$arr));
/*** 2.選擇排序
*思路分析:在要排序的一組數中,選出最小的乙個數與第乙個位置的數交換。
* 然後在剩下的數當中再找最小的與第二個位置的數交換,如此迴圈到倒數第二個數和最後乙個數比較為止。
*/functionchoicesort
($arr) }
$arr
[$ipos
] =
$arr[$i
]; // 把當前值放到算好的位置
$arr[$i
] =
$itemp
; // 把當前值換成算好的值
}return$arr;}
var_dump(choicesort(
$arr));
/*** 3.插入排序
*思路分析:在要排序的一組數中,假設前面的數已經是排好順序的,現在要把第n個數插到前面的有序數中,
* 使得這n個數也是排好順序的。如此反覆迴圈,直到全部排好順序。
*/functioninsertsort
($arr
)$arr
[$ipos+1
] =
$itemp;}
return$arr;}
var_dump(insertsort(
$arr));
/*** 4.快速排序
*思路分析:選擇乙個基準元素,通常選擇第乙個元素或者最後乙個元素。
* 通過一趟掃瞄,將待排序列分成兩部分,一部分比基準元素小,一部分大於等於基準元素。
* 此時基準元素在其排好序後的正確位置,然後再用同樣的方法遞迴地排序劃分的兩部分。
*/functionquicksort
($arr
)else
}// 如果左索引有值 則對左索引排序
if(
$l > 1)
// 排序後的陣列
$new_arr
= $left
;// 將當前陣列第乙個放到最後
$new_arr
= $arr[0
];// 如果又索引有值 則對右索引排序
if(
$r > 1)
// 根據右索引的長度再次增加資料
for(
$i = 0;
$i <
$r;
$i++)
return$new_arr;}
var_dump(quicksort(
$arr));
/*** 5.希爾排序
* 思路分析:將陣列按指定步長分隔成若干子串行,然後分別對子序列進行排序(在這是直接)
*/functionshellsort
($arr) }
}$k
= floor($k/
2);}
return$arr;}
var_dump(shellsort(
$arr));
/*** 6.堆排序
* 思路分析:調整子堆的為大根堆的過程
*@param
array &$arr 陣列
*@param
int $s 子堆的根的位置
*@param
int $m 堆最後乙個元素位置
*@return
array
*/functionheapadjust
(&$arr
, $s
, $m
)if(
$tmp
>=
$arr[$j
] )
$arr[$s
] =
$arr[$j
];$s = $j;
}$arr[$s
] =
$tmp;}
// 堆排序
functionheapsort
($arr
) // 依次把根節點調換至最後乙個位置,再次調整堆為大根堆,找到次最大值,
// 依次類推得到乙個有序陣列
for(
$n =
$len-1
; $n
> 0;
$n--)
return$arr;}
var_dump(heapsort(
$arr));
/*** 7.交換法排序
*@param
array $arr
*@return
array
*/functionswapsort
($arr)}
}return$arr;}
var_dump(swapsort(
$arr));
/*** 8.歸併排序
* 思路分析:這裡實現的是兩路歸併(分別將有序的arr1[s..m]、arr2[m+1..n]歸併為有序的$arr2[s..n])
*@param
array &$arr1
*@param
array &$arr2
*@param
int $s
*@param
int $m
*@param
int $n
*/functionmerge
(&$arr1, &
$arr2
, $s
, $m
, $n
)else
}if(
$i <=
$m)
}else if(
$j <=
$n) }}
//遞迴形式的兩路歸併
functionmsort
(&$arr1, &
$arr2
, $s
, $t
)else
}// *對一位陣列$arr[0..n-1]中的元素進行兩路歸併
functionmergesort
($arr
) var_dump(mergesort(
$arr));
//氣泡排序
////選擇排序
////插入排序
////希爾排序
////歸併排序
////快速排序
////堆排序
////計算排序
////桶排序
////基數排序
經典排序 氣泡排序
氣泡排序思想介紹 核心思想 相鄰兩個數之間比較,把大的數往右換,最終每經過一次內層迴圈,就把當前未排序的陣列的最大值換到最右邊去了 如果是從大到小排序,就把小的數往右換,換到最後那個數就是最小的 時間複雜度 氣泡排序的時間複雜度為o n 2 很好理解,內外層迴圈 下面貼上 void bubble s...
經典排序 氣泡排序
所謂 氣泡排序 可以從名稱上理解 以從小到大來舉例,冒泡 實際上就是指把值更大的元素放到數列的後面 如果是從大到小排列,則反之 通過交換來實現。我們先來大致地看下面的 感受一下氣泡排序的執行過程 氣泡排序 includeusing namespace std void bubblesort int ...
經典排序 計數排序
找到待排序列中最大最小的元素,然後以此確定臨時空間的大小,在臨時空間中,以待排序列組中元素的大小為下標,該元素出現的次數為該下標對應的元素,根據臨時空間的統計結果,重新對元素進行 把temp裡的資料 到原空間裡 for i 0 i free temp void count sort int arr,...