C# / Bubblesort-Code: Kann mir jemand erklären, wofür es zwei for-Schleifen gibt und wieso nach arr.Length -2?
using System;
namespace BubbleSort
{
class MySort
{
static void Main(string[] args)
{
int[] arr = { 78, 55, 45, 98, 13 };
int temp;
for (int j = 0; j <= arr.Length - 2; j++)
{
for (int i = 0; i <= arr.Length - 2; i++)
{
if (arr[i] > arr[i + 1])
{
temp= arr[i + 1];
arr[i + 1] = arr[i];
arr[i] = temp;
}
}
}
Console.WriteLine("Sorted:");
foreach (int p in arr)
Console.Write(p + " ");
Console.Read();
}
}
}
2 Antworten
Warum der Name Bubblesort?
Weil der aktuell größte Wert im Array aufsteigt, wie ein Blubberbläschen. Also, ich vertausche beginnend vorne, zwei Werte, wann immer ein größerer vor einem kleineren steht. Hierdruch bewege ich das größte Element ans Ende. (innere Schleife).
Nur habe ich damit natürlich die Sortierung nicht fertig, ich muß dann den zweitgrößten Wert nach hintern schieben, bis an die Endposition, dann den 3.-größten usw. - das ist die äußere Schleife.
Da ich bei 0 anfange zu zählen und mein letzter Vergleich das vorletzte Element und das letzte umfasst, halte ich logischerweise beim vorletzen Element an -> position<=Länge-2, oder eben position<Länge-1 als alternative Formulierung.
Die Umsetzung ist übrigens extrem ungünstig, weil die innere Schleife unnötig viele Durchläufe macht.