快速排序详解

为什么要使用快速排序呢?相信大家都只是为了快速排序算法而学习快速排序,那么下面就来说一下快速排序的应用场景:

1、在部分有序的集合中进行快速排序,会大大降低时间跟空间复杂度,因为它是跳跃式交换,并非类似与冒泡排序的相邻交换。

2、它的最坏的时间复杂度跟冒泡排序一样都是O(n^2),但是平均复杂度是O(nlogn),总体来讲如果待排序的集合部分有序的话,快速排序要比其他排序更快。

快速排序算法思想:

1、每次选取结合最左边(右)的值作为监视哨

2、后通过两个变量left和right来当作待排集合的的变换下标

3、一遍循环将数组分为两部分,左边的值都小(大)于监视哨的值,右边的都大(小)于监视哨的值

4、继续遍历分出来的子集合

代码献上:

package test;
 
/** 
* @author HRX
* @version 创建时间:2018年9月30日 下午5:10:23 
* 类说明 
*/
public class Tree {
	public static void main(String[] args) {
		int[] num = {3,2,1,7,3,1,4,10,2};
		sort(num, 0, num.length-1);
		for(int x : num)
			System.out.println(x);
	}
	public static int divide(int[] num ,int left ,int right){	//划分算法,将数组由一个value分为两部分
		int n = num[left];
		System.out.println(left+"....."+right);
		while(left < right){
			while(left num[left])		
				left++;
			if(left r)
			 return;
		 int x = divide(num, l, r);
		 sort(num,l , x-1 );
		 sort(num,x+1 , r);
	 }
}

 

你可能感兴趣的:(快速排序详解)