zoukankan      html  css  js  c++  java
  • 排序算法---快速排序

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

    数据演示:
    待排序序列: 10 7 15 2 5 27 13

    第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));
    
  • 相关阅读:
    51nod 1087 1 10 100 1000(找规律+递推+stl)
    51nod 1082 与7无关的数 (打表预处理)
    51 nod 1080 两个数的平方和
    1015 水仙花数(水题)
    51 nod 1003 阶乘后面0的数量
    51nod 1002 数塔取数问题
    51 nod 1001 数组中和等于K的数对
    51 nod 1081 子段求和
    51nod 1134 最长递增子序列 (O(nlogn)算法)
    51nod 1174 区间中最大的数(RMQ)
  • 原文地址:https://www.cnblogs.com/xinxinmifan/p/sort-algorithm-quickSort.html
Copyright © 2011-2022 走看看