你好,我有我的程序,与大学课程时间表有关,它有一对夫妇排序功能,我们将处理升序gpa功能和降低gpa功能。颠倒排序的顺序
这是下降的功能,它正常功能:
void classSchedule::downGPA(classSchedule schedule[], int& numElems)
{
classSchedule temp;
int end;
for (end = numElems - 1; end >= 0; end--)
{
for (int counter = 0; counter < end; counter++)
{
if (schedule[counter].classNumber == 000)
counter++;
if (schedule[counter].currentGPA < schedule[counter + 1].currentGPA)
{
temp = schedule[counter];
schedule[counter] = schedule[counter + 1];
schedule[counter + 1] = temp;
}
}
}
schedule->outputToConsole(schedule, numElems);
}
这是上升的功能,它会显示没有因为某些原因:
void classSchedule::upGPA(classSchedule schedule[], int& numElems)
{
classSchedule temp;
int end;
for (end = numElems - 1; end >= 0; end--)
{
for (int counter = 0; counter < end; counter++)
{
if (schedule[counter].classNumber == 000)
counter++;
if (schedule[counter].currentGPA > schedule[counter + 1].currentGPA)
{
temp = schedule[counter];
schedule[counter] = schedule[counter + 1];
schedule[counter + 1] = temp;
}
}
}
schedule->outputToConsole(schedule, numElems);
}
我改变了符号和它不显示任何内容谁能看到为什么?
编辑:
按照要求输出功能
void classSchedule::outputToConsole(classSchedule currentSchedule[], int numElems)
{
int i;
cout << endl << "Dept" << "\t" << "Class Number\t" "Credit Hours" << "\t" << "Name"
<< "\t" << "Room Number" << "\tGPA"
<< endl << "----" << "\t------------" << "\t------------- ----"
<< "\t-----------" << "\t---";
for (i = 0; i < numElems; i++)
{
if (currentSchedule[i].displayOrNot == "FALSE")
i++;
if(currentSchedule[i].currentGPA == -1)
{
break;
}
cout << endl << currentSchedule[i].classDepartment << " " << currentSchedule[i].classNumber << " \t"
<< " " << currentSchedule[i].creditHours << " \t"
<< currentSchedule[i].teacherLastName << " " << currentSchedule[i].teacherFirstName
<< "\t" << currentSchedule[i].roomWingAndNumber << "\t" << currentSchedule[i].currentGPA;
}
}
你为什么要分类排序?使用'std :: sort'并停止它。另外,我认为我看到fencepost错误(读取数组末尾)。为什么'numElem'是一个非const的int&'?为什么在其循环之外创建'int end'?为什么'计数器'在代码中以一种疯狂的方式递增? – Yakk 2015-02-05 19:08:20
@Yakk使用'std :: sort()''reverse_iterator'也可以解决问题。 – 2015-02-05 19:09:53
无论你如何排序:如果你已经有升序列表:只需将其颠倒过来以降序排列。这样做比较简单,而且只需花费O(n) - 比任何基于比较的排序算法都要好。 – 5gon12eder 2015-02-05 19:10:10