快速排序 leecode 912(sts debug)

在这里插入图片描述

在这里插入图片描述

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;
    }
   
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值