2012-03-29 11 views
5

Ich habe eine Hausaufgabe, um ein Array in aufsteigender Reihenfolge zu sortieren. Offensichtlich ist dies manuell zu tun, ohne irgendeine Art von sort() Funktion zu verwenden.Manuelles Sortieren eines Arrays in aufsteigender Reihenfolge

Ich dachte, es zu tun, würde ich zwei for Schleifen benötigen: die erste Schleife wird durch das vorhandene Array und erstellen Sie einen temporären Wert mit dem Wert und Index des Arrays. Die zweite Schleife vergleicht die temporären Werte mit den vorhandenen Werten und sortiert sie. Ich versuche immer, den Code zu schreiben, aber ich kann es einfach nicht richtig machen. Hier ist die neueste Methode, die ich kam mit:

public int[] sortArray (int[] inArray) 
{ 
    //Construct the array we're using here 
    int[] newArray = inArray; 

    for(int x = 0; x < a.length; x++) //a.length = # of indices in the array 
    { 
     int tempValue = a[x]; 
     int tempIndex = x; 

     for(int y = 0; y < a.length; y++) 
     { 
      if(tempValue < a[y]) 
      { 
       newArray[x] = tempValue; 
      } 
     } 
    } 

    return newArray; 
} 

Ich bin ziemlich sicher, das ist falsch, aber wenn jemand mich in der richtigen Richtung schieben könnte es sehr geschätzt werden würde!

+1

Es könnte sich lohnen Sie zunächst zu einem bestimmten Pseudocode für verschiedene Sortieralgorithmen: http://maven.smith.edu/~thiebaut/java/sort/ – Magrangs

+0

sollen Sie Verwenden Sie einen bestimmten Sortieralgorithmus? – twain249

+0

Sofern Sie nicht ausdrücklich aufgefordert wurden, Ihren Sortieralgorithmus auszuarbeiten, empfehle ich, einen einfachen zu finden und ihn in Ihrem Code zu implementieren. Und anstatt "ziemlich sicher" zu sein, dass Ihr Code falsch ist, testen Sie ihn einfach und finden Sie es heraus. – alexis

Antwort

5

Sie haben eine fast in Ordnung Version des . Sie müssen Ihre y unter x+1, nicht unter 0 starten. Andernfalls scannen Sie den sortierten Teil des Arrays erneut. Sie sollten außerdem beachten, dass die Auswahlsortierung ein In-Place-Algorithmus ist. Wenn Sie eine Kopie des Arrays erstellen möchten, sollten Sie die Methode Arrays.copy verwenden, andernfalls erstellt int[] newArray = inArray; einen Alias, keine Kopie. Schließlich sollte die if Anweisung in der verschachtelten Schleife Swapa[x] und a[y], nicht einfach gesagt tempValue in:

if(newArray[x] < newArray [y]) { 
    int tempValue = newArray[y]; 
    newArray[y] = newArray[x]; 
    newArray[x] = tempValue; 
} 
+0

Könntest du etwas über den Tausch-Teil erzählen? –

+1

@AndrewDeForest sicher, bitte sehen Sie die Bearbeitung. – dasblinkenlight

+0

Danke für den Tipp über 'Arrays.copy'! Ich habe das irgendwie übersehen, aber es stellte sich heraus, dass das mein Problem war :) –

1

Anstatt zu versuchen, Ihren eigenen Sortieralgorithmus zu erfinden, würde ich Sie bitten, zu untersuchen, was bereits vorhanden ist . Es gibt eine Tonne des Stands der Technik auf diesem.

Werfen Sie einen Blick auf die Wikipedia-Artikel: Sorting algorithm.

Bubble sort ist sehr einfach zu implementieren, hat aber quadratische Komplexität (das gleiche wie Ihr aktueller Versuch).

Quicksort ist nicht zu schwer zu implementieren, und hat eine bessere durchschnittliche Komplexität.

1

Die Sortier Sie versuchen zu erreichen Bubble sort genannt wird - die Wikipedia-Eintrag ist ziemlich gut, sollten Sie Lies es. Allerdings wird es nie wirklich verwendet, weil es eine bessere Alternative gibt - Insertion sort (Ein Beispiel ist Timsort in Python, das eine Mischung aus Merge-Sortierung und Insertion-Sortierung ist). Diese beiden sind die grundlegenden Algorithmen, die zu Ihrer Idee mit zwei Schleifen passen, daher O (n) Komplexität.

Sie sollten auch verschiedene Algorithmen für die Zuordnung oder zumindest in Betracht ziehen, sich bewusst sein:

Hoffe, es hilft.

0
int minval = input[0]; 
int temp=0; 


for(int i = 0; i< input.length; i++) 
{ 
    for(int j = 0; j< input.length-1; j++) 
    { 
     if(input[j+1]<input[j]) 
     { 
      temp=input[j+1]; 
      input[j+1]=input[j]; 
      input[j]=temp; 
     } 
    } 
} 
+2

Füge keinen Code hinzu. Beschreibe was du getan hast – Jens

+0

Was machst du ??? Minval wird nicht verwendet –

0
int arr[] = new int[]{10, 20, 5, 6, 30, 1, 2}; 
    boolean bool = true; 
    int t = 0; 
    while (bool) { 
     for (int i = 0; i < arr.length - 1; i++) { 
      if (arr[i] > arr[i + 1]) { 
       int c = arr[i]; 

       arr[i] = arr[i + 1]; 
       arr[i + 1] = c; 
       t++; 
      } 
     } 
     if (t == 0) { 
      bool = false; 
     } 
     t = 0; 
    } 

    for (int y : arr) { 
     System.out.println(y); 
    } 
+0

Fügen Sie keinen Code hinzu. Beschreibe, was du getan hast – Jens

-1
int[] number = { 1,2,1,3,5,4 }; 
    int temp; 
    for (int i = 0; i < number.length; i++) 
     { 
      for (int j = i + 1; j < number.length; j++) 
      { 
       if (number[i] > number[j]) 
       { 
        temp = number[i]; 
        number[i] = number[j]; 
        number[j] = temp; 
       } 
      } 
     } 

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

Füge keinen Code hinzu. Fügen Sie eine Beschreibung hinzu – Jens

+2

Willkommen zu Stack Overflow! Obwohl dieser Code helfen kann, das Problem zu lösen, erklärt er nicht, warum und/oder wie er die Frage beantwortet. Die Bereitstellung dieses zusätzlichen Kontextes würde seinen langfristigen Bildungswert erheblich verbessern. Bitte [bearbeiten] Sie Ihre Antwort, um eine Erläuterung hinzuzufügen, einschließlich der Einschränkungen und Annahmen. –

Verwandte Themen