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));
    
  • 相关阅读:
    ASP.NET MVC基于标注特性的Model验证:DataAnnotationsModelValidator
    TDD个人实践体会
    客户端调用Spring.Net发布的WebService
    XML自动解析器开源
    Javascript MVVM模式前端框架—Knockout 2.1.0系列
    定时执行SQL存储过程
    orchard之lucene.net索引生成
    并发编程学习总结
    python开发总结
    Thrift
  • 原文地址:https://www.cnblogs.com/xinxinmifan/p/sort-algorithm-quickSort.html
Copyright © 2011-2022 走看看