快速排序java实现

前言:据说很多公司面试官都喜欢让被面试者手撸快排。所以你也应该掌握!

快速排序是不稳定的,最好情况时间复杂度为O(nlogn),最坏是O(n平方),平均时间复杂度为O(nlogn),空间复杂度为O(logn)。

import java.util.Arrays;
public class Main {
	
	/**
	 * 相当于包了一层这样只用传入一个参数即可
	 * @param keys
	 */
	public static int[] quickSort(int[] keys){  //快速排序(升序)
		return quickSort(keys,0,keys.length-1);
	}	

        //对存于keys数组begin到end之间的子序列进行一趟快速排序,递归算法。
	private static int[] quickSort(int[] keys,int begin,int end) {
		if(begin>=0 && begin<keys.length && end>=0 && end<keys.length && begin<end){
			int i = begin, j= end;				//i,j下标分别从子序列的前后两端开始
			int vot = keys[i];					//子序列第一个值作为基准值
			while(i<j){
				while(i<j && keys[j]>=vot) 		//从后向前寻找较小值,不移动与基准值相等元素
					j--;
				if(i<j){
					keys[i++] = keys[j];		//子序列后端较小元素向前移动
				}
				while(i<j && keys[i]<=vot)		//从前向后寻找较大值,不移动与基准值相等元素
					i++;
				if(i<j){
					keys[j--] = keys[i];		//子序列前端较大元素向后移动
				}
			}
			keys[i] = vot;						//基准值到达最终位置
			System.out.print(begin + ".." +end+ ", vot="+vot+" ");
			System.out.println(Arrays.toString(keys));
			quickSort(keys, begin, j-1);		//前端子序列再排序,递归调用
			quickSort(keys, i+1,  end);			//后端子序列再排序,递归调用
		}
		return keys;
		
	}
	
	public static void main(String[] args) {
		
		int[] keys = {38,38,97,75,61,19,26,49};
		int[] sortResult = quickSort(keys);
		System.out.println(Arrays.toString(sortResult));//Arrays.toString(array)	
    }

}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值