java快速排序

@java快速排序

快排原理:
在要排的数(比如数组A)中选择一个基准值(比如A[0]),通过一趟排序将数组A分成两部分,其中以基准值为中心,基准值右边都比基准值大,基准值左边的都基准值小,然后对这两部分分别重复这个过程(递归),直到整个有序。

方法:
1.定义i=0,j=a.length()-1。定义基准值temp=a[0]。i为第一个数的下标,j为最后一个数的下标;
2. 从最后一个数(a[j])向左查找,找到小于基准值的数时停止,此时j为该数的下标;
3. 从第一个数(a[i])向右查找,找到大于基准值的数时停止,此时i为该数的下标;
4. 交换a[i]和a[j];
5. 重复2-4步,直到i=j;
6. 交换基准值和a[i];
7. 此时以基准值的数值分成两部分,左边小于基准值,右边大于基准值;然后对这两部分继续排序

package Sort;

import java.util.Arrays;

public class QuickSort {

	public static void main(String[] args) {
		int[] a = {6,2,3,1,5,8,4,0,9,7};

		System.out.println(Arrays.toString(a));
		quickSort(a,0,a.length-1);
		System.out.println(Arrays.toString(a));
	}

	public static void quickSort(int []a,int left, int right) {
		
		//递归结束条件
		if(left > right)
			return;
		int i = left;
		int j = right;
		int temp = a[i];//基准值
		//完成一趟排序
		while (i < j) {
			//从右向左找到第一个小于temp的数
			while (temp < a[j] && i < j)
				j--;
			//从左向右找到第一个大于temp 的数
			while (temp >= a[i] && i < j)
				i++;
			//交换a[i] 和 a[j]
			if (i < j) {
				int t = a[i];
				a[i] = a[j];
				a[j] = t;
			}
		}
		//调整temp 的位置
		int t = a[i];
		a[i] = a[left];
		a[left] = t;
		//对temp 的左边进行快速排序
		quickSort(a,left, i - 1);
		//对temp 的右边进行快速排序
		quickSort(a,i + 1, right);
		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值