1.直接插入算法
原理: 將一個(gè)記錄插入到已排序好的有序表中,從而得到一個(gè)新,記錄數(shù)增1的有序表。即:先將序列的第1個(gè)記錄看成是一個(gè)有序的子序列,然后從第2個(gè)記錄逐個(gè)進(jìn)行插入,直至整個(gè)序列有序?yàn)橹埂?/p>
//方法一
/**
* @param $arr 需排序的數(shù)組
*/
function insert_sort($arr)
{
$count = count($arr);
for($i =0; $i<$count; $i++){
for($j=1; $j<($count-$i); $j++){
if($arr[$j-1] > $arr[$j]){
$temp = $arr[$j-1];
$arr[$j-1] = $arr[$j];
$arr[$j] = $temp;
}
}
}
return $arr;
}
//方法二
function insert_sort($arr){
for ($i = 0; $i < count($arr); $i++){
$j = 1;
while($j < count($arr)){
if( $arr[$j-1]> $arr[$j]){
$temp = $arr[$j-1];
$arr[$j-1] = $arr[$j];
$arr[$j] = $temp;
}
$j++;
}
}
return $arr;
}
2.希爾排序算法
原理: 希爾排序是把記錄按下標(biāo)的一定增量分組,對(duì)每組使用直接插入排序算法排序;隨著增量逐漸減少,每組包含的關(guān)鍵詞越來越多,當(dāng)增量減至1時(shí),整個(gè)文件恰被分成一組,算法便終止。
23 , 56 , 10 , 5 , 98 , 21 , 4 , 9 , 95 , 15
| -----------------------|
| -------------------- |
| ------------------- |
| ------------------- |
| ------------------- |
21 , 4 , 9 , 5 , 15 , 23 , 56 , 10 , 95 , 98
| -----------|--------------|-------------|
| -----------|------------|
| -----------|--------------|
5 , 4 , 9 , 21 , 10 , 23 , 56 , 15 , 95 , 98
//相當(dāng)于是直接插入算法
function shell_sort($arr) {
if(!is_array($arr)) return;
$n = count($arr);
for($times=floor($n/2);$times>0;$times=floor($times/2)){
for($i = $times;$i<$n;$i++){
for($j = $times;$j<=($n-$i) && $j>=0;$j+=$times){
if($arr[$j-$times]>$arr[$j]){
$temp = $arr[$j-$times];
$arr[$j-$times] = $arr[$j];
$arr[$j] =$temp ;
}
}
}
}
return $arr;
}
3.直接選擇排序算法
原理:
timg.jpg
function select_sort($arr){
for($i = 0; $i < count($arr); $i++){
$key = $arr[$i];
$n = $i;
for($j = $i+1; $j < count($arr); $j++){
if($key > $arr[$j]){
$key = $arr[$j];
$n = $j;
}
}
$arr[$n] = $arr[$i];
$arr[$i] = $key;
}
return $arr;
}
4.堆排序算法
原理:
5.冒泡排序算法
原理:
//冒泡排序
function mopao_sort($arr){
$n= count($arr);
for($i=0;$i<$n;$i++){
for($j=0;$j<$n-1;$j++){
if($arr[$j]>$arr[$j+1]) {
$c = $j;
$temp = $arr[$j+1];
$arr[$j+1] = $arr[$c];
$arr[$c] = $temp;
}else{
$c = $j+1;
}
}
}
return $arr;
}
