先上代码
public static void quickSort(int[] arr,int low,int high){
int i,j,temp,t;
if(low>high){
return;
}
i=low;
j=high;
//temp就是基准位
temp = arr[low];
while (i<j) {
//先看右边,依次往左递减
while (temp<=arr[j]&&i<j) {
j--;
}
//再看左边,依次往右递增
while (temp>=arr[i]&&i<j) {
i++;
}
//如果满足条件则交换
if (i<j) {
t = arr[j];
arr[j] = arr[i];
arr[i] = t;
}
}
//最后将基准为与i和j相等位置的数字交换
arr[low] = arr[i];
arr[i] = temp;
//递归调用左半数组
quickSort(arr, low, j-1);
//递归调用右半数组
quickSort(arr, j+1, high);
}
快速排序的思想,注意这里是选择第一个数为基数的的快速排序 对于数组4,7,9,5,3,6,8来说
在初始状态下,数字4在序列的第1位。我们的目标是将4挪到序列中间的某个位置,假设这个位置是k。现在就需要寻找这个k,并且以第k位为分界点,左边的数都小于等于4,右边的数都大于等于4。
找到这个位置以后递归调用函数排序左半数组,右半数组。
这里一定要注意判断
if(low>high){
return;
}
很重要 我在练习的时候忘了写这一句,在运行的时候递归调用函数时出现了stackoverflowerror,加上这句就可以解决