Java实现快速排序

public class Main
{
	public static void main (String[] args)
	{
		System.out.println("this is java test");
		int[] array = {19,97,9,17,1,8};
		int L = 0;
		int R = array.length - 1;
		quickSort(array, L, R);
		for (int i = 0; i < array.length; ++i) {
		    System.out.println(array[i] + " ");
		}
	}
	
	private static void quickSort(int[] array, int L, int R) {
	    if (L >= R) {
	        return;
	    }
	    //每次选取一段数组中的最左边元素作为枢轴pivot = array[L]
	    //先从最右边元素开始,初始时【left】位置为pivot,pivot已存储,所以【left】位置可被覆盖,不会丢失数据
	    //right = R 指针向前移动,直到遇到比pivot小的元素,right停
	    //【right】 放 【left】(放之前【left】位置空;放完之后,【right】位置空)
	    //left = L 指针向后移动,直到遇到比pivot大的袁旭,需要交换,left停
	    //【left】 放 【right】(放之前【right】位置空;放完之后,【left】位置空)
	    //什么时候停止?当 left == right 停止,枢轴放在最后的left == right 的位置上
	    int left = L;
	    int right = R;
	    int pivot = array[left];
	    System.out.println(" L : " + L);
	    System.out.println(" R : " + R);
	    System.out.println(" pivot : " + pivot);
	    while (left < right) {
	        while (array[right] >= pivot && left < right) {
	            right --;
	        }
	        if (left < right && array[right] < pivot) {
	            System.out.println("right");
	            array[left] = array[right];
	            left += 1;
	        }
	        while (array[left] <= pivot && left < right) {
	            left ++;
	        }
	        if (left < right && array[left] > pivot) {
	            System.out.println("left");
	            array[right] = array[left];
	            right -= 1;
	        }
	        array[left] = pivot;
	        System.out.println("------------");
	    }
	    quickSort(array, L, left - 1);
	    quickSort(array, right + 1, R);
	}
}

运行结果:

this is java test
 L : 0
 R : 5
 pivot : 19
right
left
------------
right
------------
 L : 0
 R : 3
 pivot : 8
right
------------
 L : 2
 R : 3
 pivot : 9
------------
1 
8 
9 
17 
19 
97 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值