算法--空间复杂度O(1)的快速排序

这篇博客探讨了如何将快速排序的空间复杂度降低到O(1),分别展示了两种不同的实现方式。第一种方法使用递归,但未能满足空间复杂度要求;第二种方法通过改进的快速排序算法,使用原地交换来减少辅助空间的使用,成功实现了空间复杂度为O(1)。文章以PHP代码的形式展示了具体实现,并给出了测试用例。
摘要由CSDN通过智能技术生成

算法-空间复杂度大O1的快速排序

不考虑占用空间的大小
比较简单

 $arr = [1,3,2,6,7,8,6,5,4,2,2,2,2,2,0,0,0,0,0,0,0,0,0];
function q( $arr ){
	//排除极限情况
	$len = count($arr);
	if($len <= 1){
		return $arr;
	}
	$mid = $arr[0];
	$right = [];
	$left = [];
	for( $i = 1 ; $i <= $len-1 ;  $i ++ ){
		if($mid <= $arr[$i]){
			$right[] = $arr[$i];
		}else{
			$left[] = $arr[$i];
		}
	}
	
	return array_merge(q($left),[$mid],q($right));

}

var_dump(q($arr));

空间复杂度限制在O(1)这个有点费劲

 $arr = [1,3,2,6,7,8,6,5,4,2,2,2,2,2,0,0,0,0,0,0,0,0,0];
function q( &$arr , $s , $e ){
	//排除极限情况
	if ( $e <= $s){
		return ;
	}
	$mid = $arr[$s];
	$i = $s+1;
	for( ; $i <= $e ;$i++ ){
		if( $arr[$i] >= $mid ){
			for( $j = $e ; $j >= $i ; $j-- ){
				if($j == $i){
					break 2;
				}
				if( $arr[$j] < $mid ){
					$t = $arr[$i];
					$arr[$i] = $arr[$j];
					$arr[$j] = $t;
					break 1;
				}
			}
		}
	}
	$td = $arr[$i - 1];
	$arr[$i - 1] = $mid;
	$arr[$s] = $td;
	q($arr , $s , $i - 1);
	q($arr , $i , $e );
 }
 q( $arr , 0 , count($arr) - 1 );
 var_dump($arr);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值