首页 > 试题广场 >

若一个数组为(46,79,56,38,40,84),若利用快

[单选题]
若一个数组为(46,79,56,38,40,84),若利用快速排序的方法,以第一个记录为基准得到的第一次划分结果( )
  • 38,40,46,56,79,84
  • 40,38,46,79,56,84
  • 40,38,46,56,79,84
  • 40,38,46,84,56,79
按照经典的两种方法都没法得到B,按照教材上的算法应该是A,我还特地写了个partition()试了一下;

    int partition(int[] nums, int left, int right) {
        int pivot = nums[left];
        int hi = right, lo = left;
        while (lo < hi) {
            while (lo < hi && nums[hi] >= pivot) {
                hi--;
            }
            while (lo < hi && nums[lo] <= pivot) {
                lo++;
            }
            swap(nums, lo, hi);
        }
        swap(nums, lo, left);
        return lo;
    }

    public void swap(int[] nums, int i, int j) {
        int tmp = nums[i];
        nums[i] = nums[j];
        nums[j] = tmp;
    }


发表于 2022-04-10 23:12:00 回复(0)
取出第一个数字46,38、40比它小排左边,79,56,84比它大排右边,38比40小
发表于 2021-08-30 20:31:58 回复(0)