快速排序java实现(基础)

import java.util.Arrays;

public class QuickSort {

	public static void main(String[] args) {
		
		int[] a= {23,10,12,6,2,3,1,5,7,9,4,8};
		qsort(a,0,a.length-1);
		System.out.println(Arrays.toString(a));

	}
	
	/**
	 * 递归调用快速排序
	 * @param a
	 * @param r
	 * @param p
	 */
	public static void qsort(int[] a,int r,int p) {
		//判断当前数组是否还有元素
		if(r<p) {
			int j=partition(a,r,p);
			qsort(a,r,j-1);//对左半段进行递归排序
			qsort(a,j+1,p);//对右半段进行递归排序
		}
		
	}
	/**
	 * 
	 * @param a数组
	 * @param r起始下标
	 * @param p末尾下标
	 * @return 返回下标位置
	 */
	public static int partition(int[] a,int r,int p) {
		
		int i=r+1;
		int j=p;
		int x=a[r];
		
		while(true) {
			//从头开始扫描,找到大于x的第一个元素位置
			while(a[i]<x&&i<p) {
				i++;
			}
			//从最后开始往前扫面,找到小于x的第一个元素位置
 			while(a[j]>x) {
				j--;
			}
			if(i>=j) {
				break;//找到x正确的下标则跳出循环体,i后面的数组元素都大于x,j以及前面的都小于x
			}
			swap(a,i,j);//将小于x的元素移到左边,大于x的移到右边
		}
		swap(a,r,j);//将x移动到正确位置,左边小于x,右边大于x
		return j;
	}
	/**
	 * 交换数组两个指定下标的元素
	 * @param a
	 * @param i
	 * @param j
	 */
	public static void swap(int[] a,int i,int j) {
		int temp=a[i];
		a[i]=a[j];
		a[j]=temp;
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值