2016-11-20 6 views
-4

Momentan kann der Benutzer Zahlen in die ListBox eingeben, und ich möchte, dass die ListBox nach der Bubble-Sortierung sortiert wird, wenn auf eine Sortier-Checktaste geklickt wird. Es gibt jedoch nur die Indexnummer aus, z. 0,1,2,3 ... Ich darf keine Array oder Container nur die Items Property und Parsing und Converting verwenden.Bubble sort funktioniert nicht

private void sorted() 
{ 
    int a = Convert.ToInt32(lstHoldValue.Items.Count); 
    int temp; 
    for (int i = 0; i < a; i++) 
    { 
     for (int j = i + 1; j < a; j++) 
     { 
      if (Convert.ToInt32(lstHoldValue.Items[i]) > 
       Convert.ToInt32(lstHoldValue.Items[j])) 
      { 
       temp = Convert.ToInt32(lstHoldValue.Items[i]); 
       (lstHoldValue.Items[i]) = Convert.ToInt32(lstHoldValue.Items[j]); 
       (lstHoldValue.Items[j]) = temp; 
      } 
     } 
    } 

    lstHoldValue.Items.Clear(); 
    for (int i = 0; i < a; i++) 
    { 
     Convert.ToInt32(lstHoldValue.Items.Add("\t" + i)); 
    } 
} 
+0

Nun, am Ende Sie klar Ihre Liste sortieren und dann fange an, Indizes von i zu a hinzuzufügen. Was genau versuchen Sie mit dem letzten Zyklus? –

+0

Sie löschen Ihre Listbox (und verlieren dabei ihre Werte) und fügen Schleifenindizes hinzu (das "i" in Ihrer letzten Schleife); Auch "Items.Count" ist bereits ein int, keine Notwendigkeit, es zu konvertieren – Sehnsucht

+0

Auch Algorithmus ist ich denke falsch - Blase Sortierung bedeutet Sammlung zu überprüfen, solange Sie keine Änderung der Reihenfolge machen; Sie schleifen die Sammlung einmal und in der inneren Schleife als Rest der Sammlung - es scheint nicht die richtige Implementierung der Blasensortierung zu sein. – smartobelix

Antwort

0

Wenn das Element in der List-Box nicht eine ganze Zahl ist, dann wird sie als Null sortiert (0).

Dies setzt bubbleUp auf True, was darauf hinweist, dass in der Listbox ein Austausch vorgenommen wurde. Diese Variable wird verwendet, um anzuzeigen, dass ein Swap im letzten Vergleich nicht durchgeführt wurde/wurde. Die Eingabe von while(bubbleUp) setzt bubbleUp auf false, um anzuzeigen, dass keine Swaps durchgeführt wurden. Dann eine Schleife durch jedes Element in der Listbox, um benachbarte Elemente zu vergleichen und bei Bedarf auszutauschen. Wenn ein Austausch durchgeführt wird, wird bubbleUp auf true gesetzt, um anzuzeigen, dass die Sortierung nicht abgeschlossen ist. bubbleUp muss nur einmal in der for-Schleife gesetzt werden, um anzuzeigen, dass eine weitere Iteration notwendig ist. CheckItem ist die Umwandlung von String in Integer. Hoffe das hilft.

private void sorted() 
{ 
    bool bubbleUp = true; 
    string temp = ""; 
    while (bubbleUp) 
    { 
    // bubble up adjacent values 
    bubbleUp = false; 
    for (int i = 0; i < _ListBox.Items.Count - 1; i++) 
    { 
     if (CheckItem(_ListBox.Items[i].ToString()) > CheckItem(_ListBox.Items[i + 1].ToString())) 
     { 
     temp = _ListBox.Items[i].ToString(); 
     _ListBox.Items[i] = _ListBox.Items[i + 1]; 
     _ListBox.Items[i + 1] = temp; 
     bubbleUp = true; 
     } 
    } 
    } 
} 

private int CheckItem(string inItem) 
{ 
    int value; 
    if (int.TryParse(inItem, out value)) 
    return value; 
    return 0; 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    sorted(); 
} 
0

Dieses eher wie ein Bubble-Sortieralgorithmus ist:

private void BubbleSort() 
    { 
     int a = lstHoldValue.Items.Count; 
     for (int i = 0; i < a - 1; i++) 
     { 
      var k = 0; 
      for(var j = 1; j < a - i; j++) 
      { 
       if (Convert.ToInt32(lstHoldValue.Items[j]) < Convert.ToInt32(lstHoldValue.Items[k])) 
       { 
        var temp = lstHoldValue.Items[j]; 
        lstHoldValue.Items[j] = lstHoldValue.Items[k]; 
        lstHoldValue.Items[k] = temp; 
        k = j; 
       } 
       else 
       { 
        k++; 
       } 
      } 
     } 
    } 

Es werden die Zahlen in der Items Sammlung Ihrer lstHoldValue listBox Kontrolle