2016-04-18 8 views
0

Auswahl sortieren:Selection Sort Algorithmus

sorting algorithm

Ich habe eine Auswahl Sortier-Algorithmus erstellt, aber jemand sagte mir seine nicht richtige Auswahl sortieren.

Wenn es nicht richtig ist, welche Art von Sortierung ist es? 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 sagen Sie mir, wie kann ich es verbessern?

+0

Auswahl sortieren ist ziemlich gut erklärt auf https://en.wikipedia.org/wiki/Selection_sort#Implementation. Code-Snippet auf der Seite. – Spade

Antwort

1

Um diesen Code in selection sort umzuwandeln, müssen Sie den Index des minimalen Elements im inneren Zyklus suchen und das Element an diesem Index mit dem i-ten Element austauschen, nachdem der innere Zyklus abgeschlossen ist.

So Gesamtzahl der Swaps nicht überschreitet N (ohne die aktuellen Code könnte etwa N^2/2-Swaps produzieren)

+0

so kann ich sagen, es ist kein guter Algorithmus – Xitas

+0

Erzählst du über die Auswahl sortieren oder über Ihre Implementierung? – MBo

+0

meine Implementierung – Xitas

0

Sie haben implementiert Blase Art.

Die Sortierung der Auswahl 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 ist (wie im Bild).

Es gibt drei ähnliche Sortierung alghoritms - wählen Sie Art, legen Sie sortieren und Bubble Sort können Sie beobachten, wie sie sich verhalten sich hier: http://i.imgur.com/fq0A8hx.gif

+0

in Blase sortieren wir arr [j]> arr [j + 1] zwei Elemente auf einmal – Xitas

+0

ja ich denke, Sie haben Recht – Xitas

0
 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

Sie 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; 
    }