2015-01-08 2 views
-2

У меня только вопрос относительно моего следующего кода для быстрой сортировки на Java.QuickSort alorithm

public class QuickSort{ 

public void sort(int array[]){ 
    quickSort(array,0,array.length-1); 
} 

public void quickSort(int array[], int left, int right){ 
    int index = partition(array,left,right); 
    if(left<index-1){ 
     quickSort(array,left,index-1); 
    } 
    if(index<right){ 
     quickSort(array,index,right); 
    } 
} 

public int partition(int array[], int left, int right){ 
    int pivot = array[(left+right)/2]; 
    while(left<=right){ 
     while(array[left]<pivot){ 
      left++; 
     } 
     while(pivot<array[right]){ 
      right--; 
     } 

     if(left<=right){ 
      int temp=array[left]; 
      array[left]=array[right]; 
      array[right]=temp; 
      left++; 
      right--; 
     } 
    } 
    return left; 
} 

public static void main(String args[]){ 
    int iArr[] = {23,44,1,2009,2,88,123,7,999,1040,88}; 
    QuickSort ms = new QuickSort(); 
    ms.sort(iArr); 

    for(int i=0;i<iArr.length;i++){ 
     System.out.println(iArr[i]); 
    } 
}} 

В приведенном выше коде я передаю массив методу сортировки, который ничего не возвращает. Следовательно, исходный массив в основном методе должен быть все еще несортирован. Но, когда я пытаюсь напечатать значения исходного массива в основном методе после вызова метода сортировки, они каким-то образом отсортированы.

Как можно отсортировать массив в основном методе, когда я ничего не возвращал из метода сортировки. Я знаю, что область действия ограничена только этим методом.

Пожалуйста, объясните меня. Спасибо.

+0

На каком языке это? Как этот язык обрабатывает массивы для функций? По значению или по ссылке? – Degustaf

+0

Я использую Java. Он почти такой же, как Java. – Yogi

+0

Кстати, это действительно не имеет ничего общего с быстрой сортировкой – Degustaf

ответ

1

Это потому, что массивы Java являются ссылочными типами, поэтому вы передаете ссылку на массив только методу.

Ссылки по существу является адресом, где фактический массив данные находятся в памяти

При вызове quicksort, он копирует адрес массива, но он не копирует данные по этому адресу.

Из-за этого элементы, которые вы видите в вызывающем методе, являются теми же элементами массива, которые вы изменяете в методе quicksort.