2020-11-24

排序算法之 快速排序 及其时间复杂度和空间复杂度

 

快速排序实现的重点在于数组的拆分,通常我们将数组的第一个元素定义为比较元素,然后将数组中小于比较元素的数放到左边,将大于比较元素的放到右边,

这样我们就将数组拆分成了左右两部分:小于比较元素的数组;大于比较元素的数组。我们再对这两个数组进行同样的拆分,直到拆分到不能再拆分,数组就自然而然地以升序排列了。

partition算法使用头尾两个方向相反的指针进行遍历,先将数组第一个元素设置为比较元素,头指针从左至右找到第一个大于比较元素的数,尾指针从右至左找到第一个小于比较元素的数,全部交换完毕后将比较元素放到中间位置。

public class Main{
	//找基准分区
	public static int getMiddle(int[] array,int low,int high){
		int tmp=array[low];
		while(low<high){
			while(low<high&&array[high]>tmp){
				high--;
			}
			array[low]=array[high];
			while(low<high&&array[low]<tmp){
				low++;
			}
			array[high]=array[low];
		}
		array[low]=tmp;
		return low;
	}
	//递归不断分区(分治)
	public static void _quickSort(int[] array,int low,int high){
		if(low<high){
			int middle=getMiddle(array,low,high);
			_quickSort(array,middle+1,high);
			_quickSort(array,low,middle-1);
			}
	}
	public static void quickSort(int[] array){
		_quickSort(array,0,array.length-1);
	}
	public static void main(String[] args){
		int[] array={5,2,7,1,9,3,8};
		Main qs=new Main();
		qs.quickSort(array);
		for(int i=0;i<array.length;i++){
			System.out.print(array[i]+" ");
		}
		System.out.println();
	}
}

 

参考文章:

排序算法之 快速排序 及其时间复杂度和空间复杂度

递归实现快速排序(java)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值