之前面试的时候碰到一道快速排序的题目,一直不太理解,今天学了一会,整理如下:
参考 https://blog.csdn.net/shujuelin/article/details/82423852
public static void qsort(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 (i<j&&temp<=arr[j]) { j--; } //再看左边,依次往右递增 while (i<j&&temp>=arr[i]) { i++; } //如果满足条件则交换 if (i<j) { t = arr[j]; arr[j] = arr[i]; arr[i] = t; } } //最后将基准为与i和j相等位置的数字交换 arr[low] = arr[i]; arr[i] = temp; //递归调用左半数组 qsort(arr, low, j-1); //递归调用右半数组 qsort(arr, j+1, high); }
我把while里面的判断改了一下,当i和j的比较为false之后就应该短路掉剩下那个判断。