快速排序代码+解释

快速排序

直接上代码:
时间复杂度:
最优O(nlog2n),
最坏时间复杂度为 O(n^2) ,
平均时间复杂度为O(nlog2n) 。
空间复杂度:O(log2n))

package sort;
/**
 * @author sunny龙龙哥
 * @createTime 16:46:19 星期四 2019年10月10日
 */
public class Main {
	
	
	
	public static void main(String[] args) {
		int array[]= {6  ,1,  2, 7,  9,  3,  4,  5, 10,  8};
		quickSort(array,0,array.length-1);
		for (int i : array) {
			System.out.print(i+"  ");
		}
	
	}
	
	
	public static void  quickSort(int array[],int low,int heigh) {
		if(low<heigh) {
			int index = getIndex(array,low,heigh);
			quickSort(array,low,index-1);
			quickSort(array,index+1,heigh);
		}

	}
	
	public static int getIndex(int array[],int low,int heigh) {
		int temp = array[low];
		//整体循环,将low和heigh向中间移动 low==heigh跳出
		while(low<heigh) {
			//先从后面开始比较,在low<heigh的情况下,
			//若temp<=array[heigh]则heigh--,然后进行继续进行比较,
			//若temp>array[heigh]则将array[heigh]赋给array[low],跳出该小循环
			while(low<heigh&&temp<=array[heigh]) {
				heigh--;
			}
			
			array[low] = array[heigh];
			//然后从后面开始比较,在low<heigh的情况下,
			//若temp>=array[low]则low++,然后进行继续进行比较,
			//若temp<array[low]则将array[low]赋给array[heigh],跳出该小循环
			while(low<heigh&&temp>=array[low]) {
				low++;
			}
			
			array[heigh] = array[low];
			//当low==heigh时,跳出大循环
		}
		array[low] = temp;//将temp还回去;
		return low;//此时的low和heigh所处的位置就是索引了 把数组分成了前小后大的两份
	}
	
	
	
	

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值