快速排序【JAVA实现】

/*
	 * 1、先选定并记住主元,start指向左边第一个元素,end指向右边第一个元素;
	 * 2、则从最右边第一个元素(end)开始判断,如果比主元大,则end--,反之则将end指的元素赋值给start指的元素,并且start++;
	 * 3、然后从左边(start)开始判断,如果比主元小,则start++,反之则将start指的元素赋值给end指的元素,并且end--;
	 * 4、一直重复2,3两步,直到条件start<end不再满足为止;这时就可以把主元赋值给start指的元素;
	 * 5、这时就完成了主元左右两个子集的划分,然后可以对左右两个子集进行递归操作,完成排序;
	 */
	public static void solve2(int[] array,int start,int end){
		int len = end-start+1;
		if (len <= 1) 
	        return; 
		int main = start;
	    int value = array[main]; 
	    while (start < end) { 
	        for (; start < end; --end) { 
	            if (array[end] < value) { 
	            	array[start++] = array[end]; 
	                break; 
	            } 
	        } 
	        for (; start < end; ++start) { 
	            if (array[start] > value)
	            {
	            	array[end--] = array[start];
	                break;
	            }
	        }
	    }
	    array[start] = value;
	    solve2(array, 0,start-1 );
	    solve2(array,start+1,len-1);
	}

测试:


public static void main(String[] args) {
	      int[] a = {12,15,1,18,2,35,30,11};
        System.out.print("排序之前: ");
        display(a);
        solve2(a, 0, a.length-1);
        System.out.print("排序之后: ");
	      display(a);
	}

结果:

排序之前: 12 15 1 18 2 35 30 11 
排序之后: 1 2 11 12 15 18 30 35 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值