排序之快速排序(Java版)

38 阅读1分钟
package com.Akmf.sort.HeapSort;

public class QuickSortDemo {
    public static int[] sortArray(int[] nums){
        quickSort(nums, 0, nums.length - 1);
        return nums;
    }

    private static void quickSort(int[] nums, int left,
                                  int right) {
        if(left >= right) return;
        int index = partition(nums, left, right);
        quickSort(nums, left, index - 1);
        quickSort(nums, index + 1, right);
    }

    public static int partition(int[] nums, int left, int right){
       int base = nums[left];
       int i = left , j = right;
       int tmp;
       while(i < j){
           while(nums[j] >= base && i < j){
               j--;
           }
           while(nums[i] <= base && i < j){
               i++;
           }
           if(i < j){
               tmp = nums[i];
               nums[i] = nums[j];
               nums[j] = tmp;
           }
       }
       nums[left] = nums[i];
       nums[i] = base;
       return i;
    }

    public static void main(String[] args) {
        int[] nums = {5,2,3,6,1,7};
        int[] arr = sortArray(nums);
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }

    }
}
private static void quickSort2(int[] nums, int left,
                              int right) {
    if(left >= right) return;
    int base = nums[left];
    int i = left , j = right;
    while(i < j){
        while(nums[j] >= base && i < j){
            j--;
        }
        while(nums[i] <= base && i < j){
            i++;
        }
        if ( i < j) {
            int tmp = nums[i];
            nums[i] = nums[j];
            nums[j] = tmp;
        }
    }
    nums[left] = nums[i];
    nums[i] = base;
    quickSort2(nums, left, i - 1);
    quickSort2(nums, i + 1, right);
}