zoukankan      html  css  js  c++  java
  • python php 快速排序

    #!/usr/bin/python
    #coding=UTF-8
    def partition(li,left,rigth):
    	temp = li[left] #获取第一个值假定为列表的中间值
    	while left < rigth: # 如果中间值的左边小于右边 则说明比较的值左边为空 则将值复还结束算法
    		while left < rigth and temp <= li[rigth]: #从列表结尾开始循环比较右边的值
    			rigth -= 1 #依次向左进一步 
    		li[left] = li[rigth] #将找到的值直接写到列表最开始(左边) 因为temp <= li[rigth] 所以会出现 两个值相当的情况
    		while left < rigth and temp >= li[left]:#从列表开头开始循环比较左边的值
    			left +=1 #依次向右进一步 
    		li[rigth]=li[left] #将找到的值直接写到列表最开始(右边) 因为temp >= li[left] 所以会出现 两个值相当的情况
    	li[left] = temp
    	return left
    
    def quick_sort(li,left,rigth):#快速排序利用将列表分为左右两边的方式,分别进行递归比较排序
    	if left < rigth:
    		mid = partition(li,left,rigth) #获取中间的值
    		quick_sort(li,left,mid-1) #循环调用 开始递归左边
    		quick_sort(li,mid+1,rigth) #循环调用 开始递归右边
    
    
    # 时间复杂度 最优情况为O(nlogn) 最坏情况为O(n^2) 如果第一次取得的值正好是最大或者最小的 那么会出现O(n^2) 解决办法是可以使用随机取第一个值的方法进行改进,不过只是将最坏情况的概率减小了,并不能解决此问题 
    
    li = [5,7,4,6,3,1,2,9,8];
    if __name__ == "__main__":
    	quick_sort(li,0,len(li)-1)
    	print li
    	
    ________________________________
    
    # php快速排序 因为python操作的是数组的地址 而PHP在传值的时候是把当前的值复制一份,因为递归是无法直接返回的,只能操作地址,所以这里需要传入数组地址
    ________________________________
    //快速排序
    function partition(&$li,$left,$right)
    {
    	$temp = $li[$left];
    
    	while ( $left < $right) {
    		//echo $right;echo "<br />";
    		while ($left < $right &&  $li[$right] >= $temp) {
    			//echo $right;echo "<br />";
    			$right -=1;
    		}
    		$li[$left] = $li[$right];
    		//var_dump($li);echo "<br />";
    		//echo  $li[$left];exit;
    		while ($left < $right && $li[$left] <= $temp) {
    			$left +=1;
    		}
    		$li[$right] = $li[$left];
    		//var_dump($li);echo "<br />";
    		
    	}
    	$li[$left] = $temp;
    	return $left;
    	//$mid = round(count($li)/2);
    	//return  $temp;
    }
    function quick_sort(&$li,$left,$right)
    {
    	if ($left < $right) {
    		$mid = partition($li,$left,$right);
    		//var_dump($mid);echo "<br />";
    		quick_sort($li,$mid+1,$right);
    		quick_sort($li,$left,$mid-1);
    		//var_dump($li);echo "<br />";
    	}
    
    }
    $li = [5,7,4,6,3,1,2,9,8];
    $right = count($li)-1;
    quick_sort($li,0,$right);
    var_dump($li);
    
    
  • 相关阅读:
    Dialog 对话框的文字与输入框不对齐
    ag-grid动态生成表头及绑定表数据
    ag-grid实时监测复选框变化
    Java-分页工具类
    Java-日期转换工具类
    文件上传与下载
    IDEA的安装与激活
    熟悉IDEA工具的使用
    缓存三大问题的解决办法
    制作一个省份的三级联动菜单
  • 原文地址:https://www.cnblogs.com/ikai/p/11604220.html
Copyright © 2011-2022 走看看