在网上看到的一种递归排序方法,编写了一下代码感觉挺简洁的:
/**
* 对数组某块区域排序。方法:取基准值为排序区域最后一个值,将比它大的值移到基准值后面。这样就分为了两个区域,再分别对两个区域用同样的方法,一直递归下去。注意:递归调用的性能不是很好,如果数组太大可能会栈溢出
* @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);
}