PHP-快速排序

快排算法通过多次比较和交换来实现排序

快排算法的原理如下:

    1,首先设定一个分界值,通过该分界值将数组分成左右两部分。

    2,将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于分界值,而右边部分中各元素都大于或等于分界值。

    3,然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。

    4,重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了
<?php

$arr = [];

$num = 1000;

for($i = 0;$i < $num;$i++){
    $arr[] = mt_rand(100,999);
}

// 开始的时钟时间(秒)
$start_time = microtime(true);

/**
 * 快排
 *
 * @param [type] $array
 * @return void
 */
function quick_sort($array){
    if(count($array) <= 1) return $array;

    $key = $array[0];
    $left_arr = array();
    $right_arr = array();
    for($i = 1; $i < count($array); $i++){
        if($array[$i] <= $key){
            $left_arr[] = $array[$i];
        }else{
            $right_arr[] = $array[$i];
        }
    }
    $left_arr = quick_sort($left_arr);
    $right_arr = quick_sort($right_arr);

    return array_merge($left_arr,array($key),$right_arr);
}

$endTime = microtime(true);
$timeConsum = round(($endTime - $start_time),3) * 1000;
echo '使用了 '.$timeConsum.'毫秒';
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇