程序猿修仙之路--算法之快速排序到底有多快

程序猿修仙之路--算法之快速排序到底有多快

 

快排

天下武功,唯快不破!!外功如此,内功亦是如此。今日我们来修炼一门比较快速排序算法-快速排序。快速排序流行的原因是它实现简单,并且在多数应用中比其他排序算法快的多。


习练快速排序,先要了解如下两个概念:

分治思想

关于排序,江湖盛传有一种分治思想,能大幅度提高排序心法的性能。所谓分治,即:化大为小,分而治之。达到治小而治大的成效。多年来基于分治思想衍生出多种排序心法,然万变不离其宗!

递归思想

关于递归,其实更像是一种解决问题的手段。我们把具有相同

解决思路的部分提取出来,循环调用。在code的表现形式上我们更倾向于说:自己调用自己。

程序猿修仙之路--算法之快速排序到底有多快

       

程序猿修仙之路--算法之快速排序到底有多快

               

虽然江湖上算法内功繁多,但是好的算法小编认为必须符合以下几个条件,方能真正提高习练者实力:

1            

时间复杂度(运行时间)        

在算法时间复杂度维度,我们主要对比较和交换的次数做对比,其他不交换元素的算法,主要会以访问数组的次数的维度做对比。。            

        其实有很多修炼者对于算法的时间复杂度有点模糊,分不清什么所谓的 O(n),O(nlogn),O(logn)...等,也许下图对一些人有一些更直观的认识。 

 

程序猿修仙之路--算法之快速排序到底有多快

                   

程序猿修仙之路--算法之快速排序到底有多快

                       

2            

空间复杂度(额外的内存使用)        

排序算法的额外内存开销和运行时间同等重要。 就算一个算法时间复杂度比较优秀,空间复杂度非常差,使用的额外内存非常大,菜菜认为它也算不上一个优秀的算法。
           

3            

结果的正确性        

这个指标是菜菜自己加上的,我始终认为一个优秀的算法最终得到的结果必须是正确的。就算一个算法拥有非常优秀的时间和空间复杂度,但是结果不正确,导致修炼者经脉逆转,走火入魔,又有什么意义呢?

程序猿修仙之路--算法之快速排序到底有多快

     

气运丹田,开启修炼之路

程序猿修仙之路--算法之快速排序到底有多快

原理 基本思想:选取一个元素作为分割点,通过遍历把小于分割点的元素放到分割点左边,把大于分割点的元素放到分割点元素右边。然后再按此方法对两部分数据分别排序,以此类推,直到分割的数组大小为1。 整个排序过程可以递归进行,以此达到整个数据变成有序序列。

实现快速排序的方式有很多,其中以类似指针移动方式最为常见,为什么最常见呢?因为它的空间复杂度为O(1),也就是说是原地排序

1.   我们从待排序的记录序列中选取一个记录(通常第一个)作为基准元素(称为key)key=arr[left],然后设置两个变量,left指向数列的最左部,right指向数据的最右部。

程序猿修仙之路--算法之快速排序到底有多快

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgyfxf.html