快速排序代码实现(java)

快速排序算法

快速排序算法

每一次循环都会把数据分割成两部分,以某个数为分界线,分为大于它的和小于它的两部分,然后每一个小部分再次选择某个数进入循环进行计算
如[4,2,6,3,2,8,5,3,2,4,1]
第一次循环以4为分割的点,分为了两个数组[4,2,3,2,3,2,4,1]和[6,8,5]两个部分,这就完成第一次循环了,之后再分别在两个部分里再次选择某个数循环
这个算法的时间复杂度取决于递归树的深度,在最好情况下时间复杂度为nlog2n,最坏是却达到了n^2/2。
这个算法如果为递归实现,那么对应的空间复杂度最好是为log2n,最坏时需要n
总体上来说,快速排序算法算是比较高效的算法,被广泛的应用于各个领域,简单而又实用的算法

递归实现

public class test{
	//目标数组
	int[] num={32,21,18,65,98,77,21,43,32,59};
	//交换函数
	public void exchange(int i,int j){
		int temp=num[i];
		num[i]=num[j];
		num[j]=temp;
	}
	//递归函数
	public void quicksort(int i,int j){
		int temp=num[i];
		int left=i;
		int right =j;
		if (left>=right)
			return;
		while (i<j){
			while (i<j && num[j]>temp)
				j--;
			//此时退出来的时候当前j指向的数为小于temp的数,要放在前面部分
			while (i<j &&num[i]<=temp)
				i++;
			//同理,此时退出来的数为大于temp的数
			if (i<j)
				exchange(i,j);	
		}
		num[i]=temp;//这句可以去掉
		quicksort(left,i-1);
		quicksort(i+1,right);
	}
	public static void main(String[] args){
		quicksort(1,num.length());
	}
}

非递归实现的话需要利用栈来缓存信息,具体实现方法可以看大神的文章 快速排序(三种算法实现和非递归实现)

有什么问题或者想交流的非常欢迎2018-12-19

猜你喜欢

转载自blog.csdn.net/weixin_37974649/article/details/85091861