为了账号安全,请及时绑定邮箱和手机立即绑定

JAVA实现快速排序

标签:
Java 算法 面试

快速排序是非常经典的排序,也是非常常用的排序,主要是找到一个基准进行比较,分成2部分,基准左边的小于基准,基准右边的大于基准,代码如下:

 package com.lxj.alg;

public class QuickSorted {
   
	 public static void main(String[] args) {
		  int [] array = {545,654,2,-11,24,745,58,35,64,75,253,35};
		  //int [] array = {10,9,8,7,6,5,4,3,2,1,0};
		  quickSorted(array,0,array.length-1);
		  for (int i : array) {
			System.out.print(i+"  ");
		  }
	 }
	 
	private static void quickSorted(int[] array, int start, int end) {
		if(start < end) {
			//lookForLocation 返回一趟快速排序的结果,
			//也就是确定了边界线(边界线实际上就是你用来比较的靶子)
			//左边的比右边的都小
			int loc = lookForLocation(array,start,end);
			//类似二分法,递归分治的思想,靶子左边和右边的分别继续递归排序
			quickSorted(array,start,loc-1);
			quickSorted(array,loc+1,end);
		}
	}
	
	private static int lookForLocation(int[] array, int start, int end) {
		int i = start,j = end;
		//temp就是靶子,也就是我用来分割的基准,
		//我用的是array中的第一个元素来进行左边跟右边的划分
		//好比:   44,33,25,67  44是我的基准,
		//这一趟排序后我要将数组变成 25,33,44,67
		int temp = array[start];
		while(i < j){
			//从数组右边找,直到找到比基准小的整数
			while(array[j] >= temp && i < j) 
				j--;
			//找到比基准小的数就将它复制给array的第一个索引的位置,
			//因为第一个索引的位置我用temp记录下来了
			array[i] = array[j];
			//然后从数组左边找,直到找到比基准大的整数
			while(array[i] <= temp && i < j) 
				i++;
			//大于基准的赋值给j位置的整数,
			//因为前面我已经记录下array[j]的值:array[i] = array[j];
			array[j] = array[i];
		}
		//最后讲temp中的值赋值回去,因为前面while循环中有一个重复数据
		array[i] = temp;
		//返回这趟划分的基准的位置(也就是左边小于或等于temp,右边大于或等于temp)
		return i;
	}
}

上述代码有详细的注解,也可查看我的 CSDN JAVA实现快速排序

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
7796
获赞与收藏
665

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消