取得一个key使得左边的数比它小,右边的数比它大
public int partitem(int arr[], int start, int end){
int key = arr[start];
while(start < end){
while(arr[end] >= key && start < end){
end--; //由后往前比较
}
if(arr[end] < key){
arr[start] = arr[end]; //key已经保存了arr[start]的值,不必担心丢失
}
while(arr[start] <= key && start < end){
start++; //从前往后比较
}
if(arrt[start] > key){
arr[end] = arr[start]; //arr[end]原本的值与刚开始时的arr[start]是相同的,所以
//不必担心覆盖
}
}
arr[start] = key; //此时start和end重合,把处在中间位置的key赋值给它
return start;
}
public void quickSort(int arr[], int i, int j){
//不添加条件会出现无限递归,报栈溢出错误
if(i < j){
int index = partitem(arr,i,j);
quickSort(arr,i,index-1);
quickSort(arr,index+1,j);
}
}