收录一些又长又臭,还可能要手写的模板算法题(说的就是你快排)

1.快速排序

public class QuickSort {

    public static void quickSort(int[] nums, int low, int high) {
        if (low < high) {
            int pivotIndex = partition(nums, low, high);
            quickSort(nums, low, pivotIndex - 1);
            quickSort(nums, pivotIndex + 1, high);
        }
    }

    private static int partition(int[] nums, int low, int high) {
        int pivot = nums[low];
        int i = low;int j = high;
        while(i!=j){
            while(i<j&&nums[j]>=pivot) j--;
            while(i<j&&nums[i]<=pivot) i++;
            if(i<j){
                int t = nums[i];nums[i] = nums[j];nums[j]=t;
            }
        }
        nums[low] = nums[i];
        nums[i] = pivot;
        return i;
    }

    public static void main(String[] args) {
        int[] nums = {9, 7, 5, 11, 12, 2, 14, 3, 10, 6};
        quickSort(nums, 0, nums.length - 1);
        for (int num : nums) {
            System.out.print(num + " ");
        }
    }
}

2.注意的点

2.1每次划分的时候,让pivot位于i左指针最后的位置,并且返回i的位置

2.2 i,j指针移动的时候,请先优先移动指针j,这样能保证i指针的位置是可能错的。

01-20 07:19