Was ich versuche, ist die Implementierung eines einfachen Sortieralgorithmus, der die Funktion minButGreaterThan verwendet, um die nächstkleinere Zahl im Array zu finden. Mein Problem ist, wenn das Array eine doppelte Nummer hat, wird es am Ende übergeben und verlassen. Ich habe versucht, die Controlling-if-Anweisungen zu ändern, aber nichts scheint zu funktionieren. Irgendein Rat?Auswahl Sortierung fängt keine doppelten Zahlen ein
double GradeBook::minButGreaterThan(double x) // - NEEDS TESTING
{
double minButGreaterThan = -1;
for (int i = 0; i < classSize; i++)
{
if (grades[i] > x)
{
minButGreaterThan = grades[i];
break;
}
}
for (int i = 0; i < classSize; i++)
{
if (grades[i] > x && grades[i] <= minButGreaterThan)
minButGreaterThan = grades[i];
}
return minButGreaterThan;
}
void GradeBook::selectionSort() //ascending order -- *DOES NOT WORK WITH DUPLICATE SCORES* - RETEST
{
double min = absoluteMin();
for (int i = 0; i < classSize; i++)
{
if (grades[i] == min)
{
double temp = grades[0];
grades[0] = grades[i];
grades[i] = temp;
break;
}
}
for (int i = 0; i < classSize-1; i++)
{
double next = minButGreaterThan(grades[i]);
for (int n = 1; n <= classSize; n++)
if (grades[n] == next)
{
double temp = grades[n];
grades[n] = grades[i+1];
grades[i+1] = temp;
}
}
}
Dies könnte für codereview.stackexchange.com geeignet sein –