码迷,mamicode.com
首页 > 编程语言 > 详细

排序算法---快速排序

时间:2020-02-27 16:21:18      阅读:62      评论:0      收藏:0      [点我收藏+]

标签:冒泡排序   pre   顺序   快速排序算法   数据   array   实现   UNC   quicksort   

快速排序(Quicksort)是对冒泡排序的一种改进。
快速排序算法原理如下:
首先设定一个分界值,通过该分界值将数组分成左右两部分。?
将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值。
然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。?
重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。

数据演示:

第1轮:

中间值:【10】 
<10 放左边数组larr: 7 2 5
>=10  放右边数组rarr: 15 27 13

第1轮后: 7 2 5 【10】 15 27 13

针对左边数组larr 进行上述操作得到:2 5 【7】
针对右边数组rarr 进行上述操作得到:13 【15】 27

再次递归larr: 【2】 5 

最后得到 2 5 7 10 13 15 27

代码实现:

function quickSort($arr) {
    $len = count($arr);
    if($len<=1) {
        return $arr;
    }
    $middle = $arr[0];
    $larr = [];
    $rarr = [];
    for($i=1;$i<$len;$i++) {
        if($arr[$i]>$middle){
            $rarr[] = $arr[$i];
        }else{
            $larr[] = $arr[$i];
        }
    }
    $left = quickSort($larr);
    $right = quickSort($rarr);
    
    return array_merge($left,array($middle),$right);  //array_mrege()参数必须为数组,array($middle)整型强制类型转换为数组
    
}

print_r(quickSort($arr));

排序算法---快速排序

标签:冒泡排序   pre   顺序   快速排序算法   数据   array   实现   UNC   quicksort   

原文地址:https://www.cnblogs.com/xinxinmifan/p/sort-algorithm-quicksort.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!