void ProcessSort(int studentIDs[], string studentNames[], int num)
{
for (int i = 0; i < num - 1; i++)
{
int mindex = 0;
//DO6: finish the inner loop
// Hint: it should start from i+1 and go until num-1
// if studentNames[j] is greater than studentNames[mindex]
// then store j in mindex
for (int j = i+1; j < num - 1; j++) {
if (studentNames[mindex] < studentNames[j]) {
mindex = j;
}
}
//DO7: Swap student names
SwapNames(studentNames[mindex], studentNames[i]);
//DO8: Swap student IDs'
SwapIDs(studentIDs[mindex], studentIDs[i]);
}
cout << "Class List sorted by name." << endl;
}
选择排序似乎没有抓住数组中的最后一个元素。有两个并行的数组,一个带有名称,一个带有ID,但似乎学生姓名数组中的姓氏未与该排序一起注册。任何帮助将不胜感激。
答案 0 :(得分:0)
外循环的主体至少应看起来像
int mindex = i;
//DO6: finish the inner loop
// Hint: it should start from i+1 and go until num-1
// if studentNames[j] is greater than studentNames[mindex]
// then store j in mindex
for (int j = i+1; j < num; j++) {
if (studentNames[mindex] < studentNames[j]) {
mindex = j;
}
}
这种情况
if (studentNames[mindex] < studentNames[j]) {
按降序排列。
这是一个演示程序。
#include <iostream>
#include <string>
#include <utility>
void ProcessSort( int studentIDs[], std::string studentNames[], size_t n )
{
for ( size_t i = 0; i < n; i++)
{
size_t mindex = i;
//DO6: finish the inner loop
// Hint: it should start from i+1 and go until num-1
// if studentNames[j] is greater than studentNames[mindex]
// then store j in mindex
for ( size_t j = i + 1; j < n; j++ )
{
if ( studentNames[mindex] < studentNames[j] ) mindex = j;
}
//DO7: Swap student names
if ( i != mindex )
{
std::swap( studentNames[mindex], studentNames[i] );
//DO8: Swap student IDs'
std::swap( studentIDs[mindex], studentIDs[i] );
}
}
}
int main()
{
int studentIDs[] = { 495, 520, 550, 666 };
std::string studentNames[] = { "Kyle", "Liam", "Bill", "Michael" };
const size_t N = sizeof( studentIDs ) / sizeof( *studentIDs );
for ( size_t i = 0; i < N; i++ )
{
std::cout << "( " << studentNames[i] << ", " << studentIDs[i] << " ) ";
}
std::cout << std::endl;
ProcessSort( studentIDs, studentNames, N );
for ( size_t i = 0; i < N; i++ )
{
std::cout << "( " << studentNames[i] << ", " << studentIDs[i] << " ) ";
}
std::cout << std::endl;
return 0;
}
其输出为
( Kyle, 495 ) ( Liam, 520 ) ( Bill, 550 ) ( Michael, 666 )
( Michael, 666 ) ( Liam, 520 ) ( Kyle, 495 ) ( Bill, 550 )