常见排序算法以及Java实现

发布时间 2023-04-02 16:57:49作者: iscanghai
  • 快速排序
class Solution {
    //创建随机对象,便于后于选基准值
    static Random random = new Random();
    public int[] sortArray(int[] nums) {
        int n = nums.length;
        int left = 0;
        int right = n-1;
        quicksort(nums,left,right);
        return nums;
    }
     void quicksort(int[] nums, int left , int right){
         if(right<left){
             return ;
         }
         int i = left;
         int j = right;
         //基准值选取
         int pirot = random.nextInt(right-left+1)+left;
         int base = nums[pirot];
         //选定基准值后,将基准值的位置和最开头的位置交换,这样在右边留出连续空间,便于交换
         swap(nums,pirot,left);
         while(i!=j){
             while(nums[j]>=base && i<j){
                 --j;
             }
             while(nums[i]<=base && i<j){
                 ++i;
             }
             swap(nums,i,j);
         }
         //将右边连续空间的数组排好后,此时i=j会指向一个小于base的数,将这个数和最左边的基准值位置交换,得到排序后,基准值左边的数小于基准值,右边的数大于基准值
         swap(nums,left,i);
         quicksort(nums,left,i-1);
         quicksort(nums,i+1,right);
        
     }
     void swap(int[] nums,int left,int right){
         int temp = nums[left];
         nums[left] = nums[right];
         nums[right] = temp;
     }
}