Почему измененная переменная double [] 'arr' используется в методе QuickSortAlgo ниже вместо arr [], который мы изначально вводим? - PullRequest
0 голосов
/ 20 марта 2019

Я новичок в программировании, и я пытался реализовать Quicksort на Java. Мой код, кажется, работает отлично.Но есть кое-что, чего я не могу понять. Статический метод с именем 'partition' (как вы можете увидеть ниже во фрагменте кода) возвращает переменную типа int и манипулирует массивом arr.Теперь, когда я вызываю метод QuickSortAlgo с вводом как 'arr', почему этот массив 'arr', который находится внутри метода QuickSortAlgo, является манипулируемым / модифицированным массивом (измененным в методе 'partition')?Когда метод 'partition' заканчивается, не следует забывать массив 'arr' (который был изменен в partition), поскольку метод 'partition' возвращает только 'int'?

public static double[] QuickSortAlgo(double arr[],int low, int high){
            if(low<high){
                int pi=partition(arr,low,high);
                QuickSortAlgo(arr, low, pi-1);  // Before pi
                QuickSortAlgo(arr, pi+1, high); // After pi
            }

1 Ответ

1 голос
/ 20 марта 2019

Здесь:

public static double[] QuickSortAlgo(double arr[],int low, int high){

Ваш метод QuickSortAlgo() (который лучше назвать, например, runQuicksort()) получает ссылку , указывающую на массив двойных значений.

Затем он передает эту ссылку:

int pi=partition(arr,low,high);

Это означает, что оба метода «видят» один и тот же объект в памяти (этот массив двойных чисел). В памяти есть только одна вещь, и возвращаемый тип partition() не имеет к этому никакого отношения.

Итак, если partition() сначала не создаст массив NEW и не скопирует содержимое из переданного ему массива, он просто будет работать в той же области памяти, на которую "смотрит" метод сортировки.

Кроме того, вы, вероятно, захотите узнать о передаче по значению для ссылок Java .

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