算法 之 快速排序法

快速排序算法:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行

关键点 : 递归,折半  通常取第一个数为对比

时间复杂度 平均 log2(n)*n

    function sort_half($a){
        if(count($a)>1){
            $half = $a[0];
            $left = array();
            $right = array();
            for($i = 1 ; $i < count($a) ; $i++){
                if($a[$i] < $half){
                    $left[] = $a[$i];
                }else{
                    $right[] = $a[$i];
                }
            }
            $right = sort_half($right);
            $left = sort_half($left);
            return array_merge($left,array($half),$right);
        }else{
            return $a;
        }

    }

    $a = array(3,8,2,5,7,1,6,4);
    $b = sort_half($a);
    print_r($b);
    
时间: 2024-11-05 17:24:04

算法 之 快速排序法的相关文章

【JavaScript算法】---快速排序法

一.快速排序法概念 我们将一个杂乱无章的数组进行一个快速排序,可以先从一个数组中取一个中间值,将一个数组一分为2,左边的数组跟中间值进行比较,小的放在左边,大的放在右边.比较完毕后再次取中间值,再次比较一次类推 二.思路 1.取的中间值,以及中间值的下标 2.创建一个left空数组,存放小于中间值的数据 3.创建一个right空数组,存放大于中间值的数据 4.递归的终止条件,如果数组的长度等于1的时候就返回数组 5.循环将数组一分为二 6.递归 三.代码 function quicksort(a

排序算法:快速排序法

快速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都小于或等于基准值, 基准右边的元素值 都大于基准值.然后以基准数为界,分左和右两个子序列,递归调用,直至完成排序. 该方法的基本思想:一个未排序数组s[] 1.先从数列中取出一个数作为基准数(一般取第一个),保存到temp=s[l],此时第一个数组形成一个“坑”: 2.分区过程, i = l 和 j = r  (1)此时s[i]形成一个“坑”,从j向前遍历,直至找到一个s[j]<te

php四种基础算法:冒泡,选择,插入和快速排序法

转自:http://www.php100.com/html/php/rumen/2013/1029/6333.html 许多人都说 算法是程序的核心,一个程序的好于差,关键是这个程序算法的优劣.作为一个初级phper,虽然很少接触到算法方面的东西 .但是对于冒泡排序,插入排序,选择排序,快速排序四种基本算法,我想还是要掌握的.下面是我按自己的理解,将四个方法分析一遍. 需求:分别用 冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中 的值按照从小到的顺序进行排序. $arr(1,43,5

php四种基础算法:冒泡,选择,插入和快速排序法PHP基础教程

许多人都说 算法是程序的核心,一个程序的好于差,关键是这个程序算法的优劣.作为一个初级phper,虽然很少接触到算法方面的东西.但是对于冒泡排序,插入排序,选择排序,快速排序四种基本算法,我想还是要掌握的.下面兄弟连PHP培训 小编将四个方法分析一遍. 需求:分别用 冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中 的值按照从小到的顺序进行排序. $arr(1,43,54,62,21,66,32,78,36,76,39); 1. 冒泡排序法 * 思路分析:法如其名,就是像冒泡一样,每次

java基本排序算法总结 (二)——快速排序法

在网上论坛上看了很多例子,快速排序算法是各公司面试笔试常考的一种算法,并且在平时的实际应用中表现形式和实现过程也是非常优秀,笔者认为快速排序法的思想就是基于冒泡排序法,冒泡排序法是将相邻元素进行比较来进行元素的交换排序,而快速排序法则通过确定一个基准元素,将比它大或者小的的元素分别归为一组从而进行递归排序,这里具体的实现结果有点像二分法的概念.在这里借用一张网上的图片来进一步解释 如图,首先我们以头一个元素57为基准点,首先与数组的最后一个元素进行比较,57>19则交换到高位,然后与数组第二位进

排序算法之JAVA终极快速排序法

package net.qh.test.sort; import java.util.ArrayList; import java.util.Calendar; import java.util.List; /** * Created by Administrator on 2016/03/01. */ public class TermSimpleQuick { public int[] sort(int[] arr,int left,int right){ if ( arr == null

php 四种基础算法 ---- 快速排序法

4.快速排序法 代码: function quick_sort($arr) {    //先判断是否需要继续进行    $length = count($arr);    if($length <= 1) {        return $arr;    }    //如果没有返回,说明数组内的元素个数 多余1个,需要排序    //选择一个标尺    //选择第一个元素    $base_num = $arr[0];    //遍历 除了标尺外的所有元素,按照大小关系放入两个数组内    //

快速排序法(一)

说明快速排序法(quick sort)是目前所公认最快的排序方法之一(视解题的对象而定),虽然快速排序法在最差状况下可以达O(n2),但是在多数的情况下,快速排序法的效率表现是相当不错的.快速排序法的基本精神是在数列中找出适当的轴心,然后将数列一分为二,分别对左边与右边数列进行排序,而影响快速排序法效率的正是轴心的选择.这边所介绍的第一个快速排序法版本,是在多数的教科书上所提及的版本,因为它最容易理解,也最符合轴心分割与左右进行排序的概念,适合对初学者进行讲解.解法这边所介绍的快速演算如下:将最

C#版 选择法、冒泡法、插入法和快速排序法分析与对比(一)

前言 之前老师就讲过了选择法和冒泡法,之后又提到了插入法和排序法,今天做了一个小DEMO,对比了一下四种方法的效率,当然看了很多大牛也博客,其实算法还设计了时间复杂度和空间复杂度,对于这两个概念,我只能从表面上进行理解,其中涉及到了很多数学的问题,所以就不展开写了. 选择排序 冒泡法 插入法 快速排序法 这部分知识比较新,而且内容比较多,所以打算单独另外总结一遍博客,来详细的总结一下这个方法~ DEMO(比较三个算法所用时间) 先说一下设计的思路,生成要求个数的不重复的随机数,将随机数循环赋给l