排序方法1

在网上看到的一种递归排序方法,编写了一下代码感觉挺简洁的:

  

/**
	 * 对数组某块区域排序。方法:取基准值为排序区域最后一个值,将比它大的值移到基准值后面。这样就分为了两个区域,再分别对两个区域用同样的方法,一直递归下去。注意:递归调用的性能不是很好,如果数组太大可能会栈溢出
	 * @param array 排序数组
	 * @param fromIdx 起始位置
	 * @param toIdx 终止位置
	 * */
	private void sort(int array[],final int fromIdx,final int toIdx){
		if(fromIdx==toIdx){
			return;
		}
		int baseIdx = toIdx;//基准值排序后的最终位置
		final int val = array[baseIdx];
		for(int i=fromIdx;i<baseIdx;i++){
			if(array[i]>val){
				//需要移到baseIdx后面
				final int temp = array[i];
				for(int j=i;j<baseIdx;j++){
					array[j] = array[j+1];
				}
				array[baseIdx] = temp;
				i--;
				baseIdx--;
			}
		}
		if(baseIdx>fromIdx)
			sort(array, fromIdx, baseIdx-1);
		if(baseIdx<toIdx)
			sort(array, baseIdx+1, toIdx);
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值