Замена без использования временной переменной не работает в случае быстрой сортировки [Java] - PullRequest
0 голосов
/ 26 мая 2018

Я использую следующий код для реализации алгоритма быстрой сортировки

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 при замене, что странно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...