2016-06-07 15 views
-2
public int[] selectionSort(int array[]) { 

    for(int i = array.length - 1; i >= 0; i--) { 
     int highestIndex = i; 

     for(int j = i; j >= 0; j--) { 
      if(array[j] > array[highestIndex]) 
       highestIndex = j; 
     } 
     int temp = array[i]; 
     array[i] = array[highestIndex]; 
     array[highestIndex] = temp; 
    } 
    return array; 
} 

Ich verstehe das Konzept der Auswahl sortieren, aber der Code verwirrt mich. Kann jemand genauer erklären, was in den letzten drei Anweisungen der äußeren for-Schleife geschieht, die mit "int temp = array [i]" beginnt?Brauchen Sie Hilfe Verständnis Segment des Codes

+1

http://stackoverflow.com/questions/13766209/effective-swapping-of-elements-of-an-array-in-java –

+0

Sie wechseln die Orte von 'Array [i]' und 'Array [hostIndex] '. Dazu erstellen Sie eine Kopie von 'array [i]', so dass Sie auf den Wert zugreifen können, nachdem dieser von 'array [i] = array [highestIndex];' überschrieben wurde. – Gendarme

Antwort

2

Dies ist die berühmte Swapping-Routine. In Sprachen wie Java, wenn Sie die Werte zweier Variablen mit den Namen tauschen wollen sagen a und b, müssen Sie eine solche Routine zurückgreifen, wo Sie eine dritte Variable verwenden, um einen Wert auf der Durchreise zu halten:

int a = 2; 
int b = 6; 
int tmp = a; // now tmp has a value that is _copy_ of a i.e. 2 
a = b; // since we saved a in tmp, we can _mutate_ it, now a has b's value 
b = tmp; // swap! here, b = a won't work because a contains b's current value. 
// now a has value 6 and b has value 2, exactly what we wanted. 

In einige andere Sprachen, ein Konstrukt wie a, b = b, a ist für diesen Zweck verfügbar, die meiner Meinung nach intuitiver ist.

In Auswahl sortieren, nachdem die innere Schleife des Index des Elements, das den höchsten Wert hält gefunden hat, müssen Sie Swap es mit dem Element durch die äußere Schleifenindex gehalten und das ist, was diese in das erreicht Kontext.

+0

Danke, das war was ich gesucht habe. Ich wusste, dass zwei Werte ausgetauscht wurden, aber ich habe nicht verstanden, wie sich dies auf den Rest des Codes auswirkte. –