void quick(int[] arr, int left, int right){ if(left > right){ return; } //以基准数为分界限,将比基准线大的都移动到基准数的右边,将比基准数小的都移动到基准数的左边 //每次找到一对就交换位置,最后确定基准数的位置 int temp = arr[left], i = left, j = right; while(i != j){ while(i < j && arr[j] >= temp){ //找到一个比基准数小的 j --; } while( i < j && arr[i] <= temp){ //找到一个比基准数大的 i ++; } if(i < j){ //交换比基准数小的,与基准数大的 int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } } //交换基准数的位置 arr[left] = arr[i]; arr[i] = temp; quick(arr, left, i - 1); quick(arr, i + 1, right); } void quick1(int[] arr, int left, int right){ if(left > right){ return; } int temp = arr[left], i = left, j = right; while(i != j){ while(i < j && arr[j] >= temp){ //找到一个比基准数大的,将其移动到基准数的右边 j --; } arr[i] = arr[j]; while( i < j && arr[i] <= temp){ //找到一个比基准数小的移动到基准数的左边 i ++; } arr[j] = arr[i]; } //交换基准数的位置 arr[i] = temp; quick(arr, left, i - 1); quick(arr, i + 1, right); }