美文网首页
常见算法3、快速排序 Quick sort

常见算法3、快速排序 Quick sort

作者: 四月不见 | 来源:发表于2021-12-09 22:54 被阅读0次

一、简介

快速排序是一种使用分而治之(divide and cinquer,D&C)的排序算法,是最快的排序算法之一,也是C&C典范。

快速排序的原理:随机找出一个数(通常就拿数组的第一个数就行),把它插入一个位置,使得它左边的数都比它小,右边的数都比它大,这样就将一个数组分成了两个子数组,然后在按照同样的方法把子数组分成更小的子数组,直到不能分解为止。用比较通俗的话:挖坑填数+分而治之。

二、原理图:

三、代码实现:

1、Python 3 :

#使用递归实现快速排序
def quick_sort(arr):
    if len(arr) < 2:
        return arr
    else:
        pivot = arr[0]
        less = [i for i in arr[1:] if i <= pivot ]
        greater = [i for i in arr[1:] if i > pivot ]
        return quick_sort(less) + [pivot] + quick_sort(greater)

myarr = [5,7,12,1,6,88,9,0]
print(quick_sort(myarr))

=============== 运行结果:===============
[0, 1, 5, 6, 7, 9, 12, 88]

2、PHP:

//使用递归实现快速排序
//方法1:
function quicksort(array $array) {
    if (count($array) < 2) {
        // base case, arrays with 0 or 1 element are already "sorted"
        return $array;
    } else {
        // recursive case
        $pivot = $array[0];
        //var_dump($array);

        $less = array_filter(array_slice($array, 1), function($i) use ($pivot) { 
            return $i <= $pivot; 
            });

        $greater = array_filter(array_slice($array, 1), function($j) use ($pivot) { 
            return $j > $pivot; 
            });
        return array_merge(quicksort($less), [$pivot], quicksort($greater));
  }
}

$myarr = [10, 5, 2, 3, 9];
print_r(quicksort($myarr)); 

=============== 运行结果:===============
Array ( [0] => 2 [1] => 3 [2] => 5 [3] => 9 [4] => 10 )

//方法2:
public function quickSort($data)
{
    $size = count($data);
    if($size>1) {
        $key = $data[0];
        $l = $r = [];
        for ($i = 1; $i < $size; $i++) {
            if ($data[$i] >= $key)
                $r[] = $data[$i];
            else
                $l[] = $data[$i];
        }
        $l_re = quickSort($l);
        $r_re = quickSort($r);

        return array_merge($l_re, [$key], $r_re);
    }
    else
        return $data;
}

参考

1、《算法图解》https://www.manning.com/books/grokking-algorithms

相关文章

  • 11、【排序】快速排序(1)

    1、概述 快速排序(Quick Sort)是一种高级排序算法。 快速排序算法相对来说比较复杂,因为快速排序算法所延...

  • 常见算法3、快速排序 Quick sort

    一、简介 快速排序是一种使用分而治之(divide and cinquer,D&C)的排序算法,是最快的排序算法之...

  • 排序算法(七)快速排序

    排序算法(七)快速排序 1.算法思路  快速排序(Quick-Sort)是从冒泡排序演变而来及基于分而治之思想的排...

  • 1.2-交换排序-快速排序

    参考链接 交换排序:快速排序(Quick Sort) 白话经典算法系列之六 快速排序 快速搞定 快速排序是C.R....

  • 看图说话排序算法之快速排序

    本文着重介绍快速排序算法(quick sort),快速排序和冒泡排序一样是交换排序的一种,快速排序算法可以看成是对...

  • 7. 数据结构与算法:快速排序

    快速排序(quick sort)是一种分治排序算法。该算法首先 选取 一个划分元素(partition eleme...

  • 经典排序之快速排序

    快速排序(quick sort)是一种分治排序算法,该算法首先选取一个划分元素,(partition elemen...

  • 快速排序算法

    学号:20021211189 姓名:赵治伟 【嵌牛导读】快速排序(Quick Sort)是从冒泡排序算法[ht...

  • 递归(recursion)

    如何设计递归算法 确定递归公式 确定边界条件 1. Fibonacci 2. 快速排序(Quick Sort) 3...

  • 常用排序算法总结6一一快速排序

    定义 快速排序(英语:Quick Sort),又称划分交换排序(partition-exchange sort),...

网友评论

      本文标题:常见算法3、快速排序 Quick sort

      本文链接:https://www.haomeiwen.com/subject/uaunnltx.html