public static void qSort(int[] nums,int l,int r){
if (l>=r){
return ;
}
int pivot=nums[l];//将最左边的元素作为枢轴
int i=l,j=r; //i,j指针分别从前从后遍历数组指定范围
while (i<j){
while (i<j&&nums[j]>pivot) j--;//从后往前找到一个<=pivot的元素
while (i<j&&nums[i]<=pivot) i++;//从前往后找到一个>pivot的元素
if (i<j){//交换nums[i]和nums[j]
int temp = nums[j];
nums[j] = nums[i];
nums[i] = temp;
}
}
//
//将nums[l]赋值为nums[i],作为下一次递归时的枢轴
nums[l] = nums[i];
//将枢轴放在该放的位置
nums[i] = pivot;
//此时nums[i]右边的元素都比nums[i]大
// nums[i]左边的元素都比nums[i]小
qSort(nums,l,i-1); //递归处理左区间
qSort(nums,i+1,r); //递归处理右区间
}
LeetCode-快速排序
于 2023-01-05 18:04:36 首次发布