PHP中的排序算法

1.冒泡排序

冒泡排序法的基本原理就是通过依次比较相邻的两个数,将小数放前,大数放后,最大的那个数依次冒出来。

<?php
//冒泡排序
function maopao_sort( $arr){
    $num = count( $arr);
    if( $num <= 0) return false;
    for( $i = 0; $i < $num - 1; $i++){
        for( $j = 0; $j < $num - 1 - $i; $j++){
            if($arr[$j] > $arr[$j+1]){
                $temp = $arr[$j];
                $arr[$j] = $arr[$j+1];
                $arr[$j+1] = $temp;
            }
        }
    }
    return $arr;
}
$test = array(11,4,2,5,1,14,9,3);
print_r( maopao_sort( $test));
?>

该段代码输出为

Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 9 [6] => 11 [7] => 14 ) 

排序过程

原始数组为 Array( [0] => 11 [1] => 4 [2] => 2 [3] => 5 [4] => 1 [5] => 14 [6] => 9 [7] => 3)

第一轮排序 Array( [0] => 4 [1] => 2 [2] => 5 [3] => 1 [4] => 11 [5] => 9 [6] => 3 [7] => 14)
第二轮排序 Array( [0] => 2 [1] => 4 [2] => 1 [3] => 5 [4] => 9 [5] => 3 [6] => 11 [7] => 14)
第三轮排序 Array( [0] => 2 [1] => 1 [2] => 4 [3] => 5 [4] => 3 [5] => 9 [6] => 11 [7] => 14)
第四轮排序 Array( [0] => 1 [1] => 2 [2] => 4 [3] => 3 [4] => 5 [5] => 9 [6] => 11 [7] => 14)
第五轮排序 Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 9 [6] => 11 [7] => 14)
第六轮排序 Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 9 [6] => 11 [7] => 14)
第七轮排序 Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 9 [6] => 11 [7] => 14)

2.插入排序

插入排序的基本原理就是把数组分成无序和有序2个区域,依次从无序区拿出一个数,放到有序区相应的位置上。

<?php
//插入排序
function charu_sort( $arr){
    $num = count( $arr);
    if( $num <= 0) return false;
    for( $i = 1; $i < $num; $i++){
        $temp = $arr[$i];
        $j = $i - 1;
        while($j >= 0 && $arr[$j] > $temp){
            $arr[$j+1] = $arr[$j];
            $j--;
        }
        $arr[$j+1] = $temp;
    }
    return $arr;
}
$test = array(11,4,2,5,1,14,9,3);
print_r( charu_sort( $test));
?>

该段代码输出为

Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 9 [6] => 11 [7] => 14 ) 

排序过程

原始数组为 Array( [0] => 11 [1] => 4 [2] => 2 [3] => 5 [4] => 1 [5] => 14 [6] => 9 [7] => 3)

第一轮排序 Array( [0] => 4 [1] => 11 [2] => 2 [3] => 5 [4] => 1 [5] => 14 [6] => 9 [7] => 3)
第二轮排序 Array( [0] => 2 [1] => 4 [2] => 11 [3] => 5 [4] => 1 [5] => 14 [6] => 9 [7] => 3)
第三轮排序 Array( [0] => 2 [1] => 4 [2] => 5 [3] => 11 [4] => 1 [5] => 14 [6] => 9 [7] => 3)
第四轮排序 Array( [0] => 1 [1] => 2 [2] => 4 [3] => 5 [4] => 11 [5] => 14 [6] => 9 [7] => 3)
第五轮排序 Array( [0] => 1 [1] => 2 [2] => 4 [3] => 5 [4] => 11 [5] => 14 [6] => 9 [7] => 3)
第六轮排序 Array( [0] => 1 [1] => 2 [2] => 4 [3] => 5 [4] => 9 [5] => 11 [6] => 14 [7] => 3)
第七轮排序 Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 9 [6] => 11 [7] => 14)


3.选择排序

选择排序即是每一趟从待排序的数组中选出1个最小的数,顺序摆放,一直到选完为止。

<?php
//选择排序
function xuanze_sort( $arr){
    $num = count( $arr);
    if( $num <= 0) return false;
    for( $i = 0; $i < $num - 1; $i++){
        $min = $i;
        for($j = $i + 1; $j < $num; $j++){
            if( $arr[$min] > $arr[$j]){
                $min = $j;
            }
        }
        $temp = $arr[$i];
        $arr[$i] = $arr[$min];
        $arr[$min] = $temp;
    }
    return $arr;
}
$test = array(11,4,2,5,1,14,9,3);
print_r( xuanze_sort( $test));
?>

该段代码输出为

Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 9 [6] => 11 [7] => 14 ) 

排序过程

原始数组为 Array( [0] => 11 [1] => 4 [2] => 2 [3] => 5 [4] => 1 [5] => 14 [6] => 9 [7] => 3)

第一轮排序 Array( [0] => 1 [1] => 4 [2] => 2 [3] => 5 [4] => 11 [5] => 14 [6] => 9 [7] => 3)
第二轮排序 Array( [0] => 1 [1] => 2 [2] => 4 [3] => 5 [4] => 11 [5] => 14 [6] => 9 [7] => 3)
第三轮排序 Array( [0] => 1 [1] => 2 [2] => 3 [3] => 5 [4] => 11 [5] => 14 [6] => 9 [7] => 4)
第四轮排序 Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 11 [5] => 14 [6] => 9 [7] => 5)
第五轮排序 Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 14 [6] => 9 [7] => 11)
第六轮排序 Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 9 [6] => 14 [7] => 11)
第七轮排序 Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 9 [6] => 11 [7] => 14)


4.快速排序

快速排序是以第一个元素为key值,将所有比key小的元素排左边,所有比key大的元素排右边。这样就完成了一趟快速排序,然后将左右2边的元素,继续按这样的方式进行递归排序。直到剩下1个元素为止。

<?php
//选择排序
function kuaisu_sort( $arr){
    $num = count( $arr);
    if( $num <= 1) return $arr;
    $left_arr = array();
    $right_arr = array();
    $key = $arr[0];
    for( $i = 1; $i < $num; $i++){
        if( $arr[$i] <= $key){
            $left_arr[] = $arr[$i];
        }
        else{
            $right_arr[] = $arr[$i];
        }
    }
    $left_arr = kuaisu_sort( $left_arr);
    $right_arr = kuaisu_sort( $right_arr);
    return array_merge($left_arr, array($key), $right_arr);
}
$test = array(11,4,2,5,1,14,9,3);
print_r( kuaisu_sort( $test));
?>

该段代码输出为

Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 9 [6] => 11 [7] => 14 ) 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值