/ / Auswahl Sortieralgorithmus - Algorithmus, Sortierung

Auswahl Sortieralgorithmus - Algorithmus, Sortierung

Auswahl Sortieren:

Sortieralgorithmus

Ich habe einen Auswahlsortieralgorithmus erstellt, aber jemand hat mir gesagt, dass es nicht die richtige Sortierauswahl ist.

Wenn es nicht stimmt, welche Art von Sortierung ist das? und wie unterscheidet es sich dann von der Sortierung nach Auswahl.

Code:

void selection_Sort(int arr[] , int size){
int temp , length = size;
for(int i = 0; i < size ; i++){
for(int j = i + 1; j < size ; j++){
if(arr[i] > arr[j]){
temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
}

Bitte sag mir, wie kann ich es verbessern?

Antworten:

1 für die Antwort № 1

Um diesen Code in zu verwandeln Auswahl sortierenSie müssen den Index des minimalen Elements im inneren Zyklus finden und das Element an diesem Index mit dem i-ten Element austauschen, nachdem der innere Zyklus beendet ist.

Die Gesamtanzahl der Swaps übersteigt N nicht (während Ihr aktueller Code ungefähr N ^ 2/2 Swaps produzieren könnte)


0 für die Antwort № 2

Sie haben Bubble sort implementiert.

Die Auswahlsortierung bedeutet, dass Sie das niedrigste (oder größte) Element im inneren Zyklus finden und dann mit Element nach links / rechts wechseln sollten, was am Rand der Auswahl liegt (wie im Bild).

Es gibt drei ähnliche sorting algoritms - wählen Sie sort, insert sort und bubble sort Sie können beobachten, wie sie sich hier verhalten: http://i.imgur.com/fq0A8hx.gif


0 für die Antwort № 3
        var Selectionsort = function (A) {
for (var i = 0; i < A.length; i++) {
var imin = i;
for (var j = i + 1; j <= A.length; j++) {
if (A[j] < A[imin])
imin = j;
}
var tmp = A[i];
A[i] = A[imin];
A[imin] = tmp;
}
return A;
};
var A = [10, 20, 30, 40, 50, 60, 70, 80];
var Aftersorted = Selectionsort(A);
console.log(Aftersorted);

0 für die Antwort № 4

Sie können es auf diese Weise verbessern:

void selectionSort(double array[], int size) {
int min;
double temp;
for (int step = 0; step < size-1; step++)  {
min =  step;
for (int i = step+1; i < size; i++) {
if (array [i] < array[min])   {
min = i;
}
}
temp = array[step];
array [step] = array[min];
array [min] = temp;
}