冒泡排序原理

1、原理描述:

一次比较俩个相邻的元素,大的元素后移,小的元素前移(交换位置)。直到找出最大的元素。就像是气泡一样,大的向下沉,小的向上冒。

$arr = [3, 2, 1, 4, 6, 9, 8, 10, 54, 45, 79, 78, 76, 77, 67, 76, 75];
//冒泡排序
function maoPaoPaiXu($arr){
$count = count($arr);
for ($i = 0;$i<$count-1;$i++){
for ($j = 0;$j<$count-1-$i;$j++){
if($arr[$j] > $arr[$j+1]){
$temp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $temp;
}
}
}
return $arr;
}

2、快速排序

选择一个基准元素,通常选择第一个元素或者最后一个元素。通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素。此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。

//快速排序
function kuaiSuPaiXu($arr){

$count = count($arr);
if($count <=1){
return $arr;
}

$base = $arr[0];
$left = $right = [];
for ($i = 1;$i<$count;$i++){
if($arr[$i] < $base){
$left[] = $arr[$i];
}else{
$right[] = $arr[$i];
}
}
$left = kuaiSuPaiXu($left);
$right = kuaiSuPaiXu($right);
return array_merge($left,[$base],$right);
}

3、插入排序

在要排序的一组数中,假设前面的数已经是排好顺序的,现在要把第 n 个数插到前面的有序数中,使得这 n 个数也是排好顺序的。如此反复循环,直到全部排好顺序。

//插入排序
function chaRuPaiXu($arr)
{
$count = count($arr);
for ($i = 1; $i < $count; $i++) {
$temp = $arr[$i];
for ($j = $i - 1; $j >= 0; $j--) {
if($arr[$j] >$temp){
$arr[$j+1] = $arr[$j];
$arr[$j] = $temp;
}else{
break;
}
}
}
return $arr;
}

4. 选择排序

在要排序的一组数中,选出最小的一个数与第一个位置的数交换。然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。

//选择排序
function xuanZePaiXu($arr){
$count = count($arr);
for ($i = 0;$i<$count-1;$i++){
$pos = $i;
for ($j = $i+1;$j<$count;$j++){
if($arr[$j] < $arr[$pos]){
$pos = $j;
}
}
if($pos != $i){
$temp = $arr[$pos];
$arr[$pos] = $arr[$i];
$arr[$i] = $temp;
}
}
return $arr;
}

 

posted on 2020-05-07 15:11  周大妈  阅读(204)  评论(0)    收藏  举报