내가 뭘하려는 건 배열에서 다음 작은 번호를 찾기 위해 minButGreaterThan 함수를 사용하는 간단한 선택 정렬 알고리즘을 구현하는 것입니다. 내 문제는 배열에 중복 된 숫자가있는 경우 끝에 전달되고 끝에 남습니다. 이 문제를 해결하기 위해 if 문을 변경하려고 시도했지만 아무 것도 작동하지 않는 것 같습니다. 어떤 충고?선택 정렬 중복 번호를 catch하지 않습니다
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;
}
}
}
이것은 codereview.stackexchange.com –