亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

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開發工程師
手記
粉絲
7794
獲贊與收藏
665

關注作者,訂閱最新文章

閱讀免費教程

感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消