首页 > 解决方案 > 在 QuickSort [Java] 的情况下,不使用临时变量的交换不起作用

问题描述

我正在使用以下代码来实现快速排序算法

public class QuickSort {

    int partition(int arr[], int low, int high) {
        //select last elem as pivot
        int pivot = arr[high];
        //init i as low - 1
        int i = low - 1;
        //GOAL : Shift all elem LT pivot to L and GT than pivot to R
        for (int j = low; j < high; j++) {
            if (arr[j] <= pivot) {
                i++;
                //swap a[i] & a[j]
                swap(arr, i, j);
            }
        }
        //swap i+1 elem with pivot
        swap(arr, i + 1, high);
        //i+1 is pos of partition
        return (i + 1);
    }

    void swap(int arr[], int i, int j) {
        //swap i & j elem of arr
        arr[i] = arr[i] ^ arr[j];
        arr[j] = arr[i] ^ arr[j];
        arr[i] = arr[i] ^ arr[j];
    }

    void sort(int arr[], int low, int high) {
        if (low < high) {
            int pi = partition(arr, low, high);
            //sort L and R of pi
            sort(arr, low, pi - 1);
            sort(arr, pi + 1, high);
        }
    }

    public static void main(String[] args) {
        int arr[] = {10, 7, 8, 9, 1, 5, 12, 4, 6};
        QuickSort quickSort = new QuickSort();
        quickSort.sort(arr, 0, arr.length - 1);
        //print
        for (int i : arr) {
            System.out.print(i + " ");
        }
    }
}

这给出了0 4 5 6 0 0 9 0 0不正确的输出。如果我使用临时变量实现交换,它会给出正确的答案。如果我在没有方法的情况下实现交换逻辑,则代码不起作用..!!

如果输入数组是{10, 7, 8, 9, 1, 5},我得到正确的输出。我试图调试它,我观察到值在交换时变为 0,这很奇怪。

标签: javaquicksort

解决方案


推荐阅读