leetcode代码:
class Solution {
public Random rand =new Random(); //全局变量 每次递归调用。生成随机值pivot的指针 ;
public int[] sortArray(int[] nums) {
quickSort(nums,0,nums.length-1);
return nums;
}
private void quickSort (int[] nums,int start,int end){
if(start>=end) return; //递归终止条件
int index=rand.nextInt(end-start+1) +start; //指针取随机数[start,end-start-1) 第一次快排[0,nums.length)
int pivot=nums[index]; //得到目标分界点pivot
int left=start; //传入实际参数
int right=end;
while(left<=right){
while(left<=right&&nums[left]<pivot) left++; //左指针小于pivot 左指针一直往右移
while(left<=right&&nums[right]>pivot) right--; //右指针小于pivot 右指针一直往左移
if(left<=right){//再判断下,若还有左指针大于右指针,交换位置,最终得到pivot左边都比pivot小。。
swap(nums,left,right); //交换位置的方法,比pivot小的数字 往right一侧移动,比pivot大的往left一侧移动
left++;
right--;
}
}
quickSort(nums,start,right);
quickSort(nums,left,end);
}
private void swap(int[] nums, int left ,int right){
int temp =nums[left];
nums[left]=nums[right];
nums[right]=temp;
}
}
sts代码 debug版:
package letcode;
import java.util.Random;
public class Solution {
public static Random rand =new Random(); //全局变量 每次递归调用。生成随机值pivot的指针 ;
public static void main(String[] nums1) {
int[] nums = { 5, 2, 3, 1,9,7};
quickSort(nums,0,nums.length-1);
for (int i : nums) {
System.out.println("排序后:"+i);
}
}
private static void quickSort (int[] nums,int start,int end){
if(start>=end) return; //递归终止条件
int index=rand.nextInt(end-start+1) +start; //指针取随机数[start,end-start-1) 第一次快排[0,nums.length)
int pivot=nums[index]; //得到目标分界点pivot
System.out.println("随机界点"+pivot);
int left=start; //传入实际参数
int right=end;
while(left<=right){
while(left<=right&&nums[left]<pivot) left++; //左指针小于pivot 左指针一直往右移
while(left<=right&&nums[right]>pivot) right--;
//右指针小于pivot 右指针一直往左移
if(left<=right){ //再判断下,若还有左指针大于右指针,交换位置,最终得到pivot左边都比pivot小。。
swap(nums,left,right); //交换位置的方法,比pivot小的数字 往right一侧移动,比pivot大的往left一侧移动
left++;
right--;
}
}
quickSort(nums,start,right);
quickSort(nums,left,end);
for (int i : nums) {
System.out.println("每次排序后:"+i);
}
}
private static void swap(int[] nums, int left ,int right){
int temp =nums[left];
nums[left]=nums[right];
nums[right]=temp;
}
}