【数据结构】-java实现快速排序算法(递归和非递归)(三)

快速排序的算法思想、动态演示 、C++、python实现,请参考快速排序详解
快速排序也是一种选择排序。
快速排序的思想:将序列分为两部分,左边一部分比它小,右边一部分比它大。然后递归。这里的它,指的是基数。
快速排序的性能分析

每次分成两个序列都需要1个空间存储基准值。由于递归,时间复杂度为NlogN,所以空间复杂度也为NlogN。
在快速排序过程中,由于相同元素可能会因为分区而交换顺序,所以它是不稳定的算法。

java实现代码
	public  int partition(int[] arry,int low,int high){
		int temp;
		int i=low,j=high;
		if(low<high){//递归的边界条件
			temp=arry[low];
			while(i<j){
				while(i<j&&arry[j]>=temp)
					--j;
				if(i<j){这里进行一个判断是优化操作 
					arry[i]=arry[j];
					++i;//这里也是一个优化操作
				}
				while(i<j&&arry[i]<=temp)
					++i;
				if(i<j){这里进行一个判断是优化操作 
					arry[j]=arry[i];
					--j;//这里一个一个优化操作
				}
			}
			arry[i]=temp;
		}
		return i;
	}
public int[] quickSort1(int[] arry,int low,int high){
	if(low<high){
		int mid=partition(arry,low,high);
         quickSort1(arry,low,mid-1);
         quickSort1(arry,mid+1,high);
	}
	return arry;
}

  public int[] quickSort2(int[] arry,int low,int high){
        Stack<Integer> stack=new Stack<>();
        stack.push(low);
        stack.push(high);
        int mid;
        while (stack.size()>1){
            int j=stack.pop();
            int i=stack.pop();
            mid=partition(arry,i,j);
            if (i<mid-1){
                stack.push(i);
                stack.push(mid-1);
            }
            if (mid+1<j){
                stack.push(mid+1);
                stack.push(j);
            }
        }
        return arry;
        
    }




总结

1.代码可以根据动态显示来理解,就比较清晰。
2.基准值的存储以及赋值。
3.递归

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值