我正在做作业,要求我使用选择排序按字母顺序(升序和降序)对名称进行排序。所以有一个数据文件,其中保存了所有名称,它被称为“names.dat”。 名称保存如下:
Collins, Bill
Smith, Bart
.
.
.
Holland, Beth
所以我做的是从文件中读取数据并将它们保存在2D数组中。然后我写了一个void函数,按升序对名称进行排序。我想我理解选择排序方法是如何工作的,但我似乎不明白如何处理2D数组...最终我需要显示按字母顺序排序的名字而不排序姓氏(我只是去假设名称以“first,last”的形式保存,例如,在排序之后,显示器将如下所示:“Collins,Bill / n Holland,Beth / n,...,Smith,Bart”< / p>
我花了很多时间来理解选择排序并将其写入程序中,但现在我面临着不知道如何操作阵列的问题......我真的很感谢你的帮助!我会在这里发布我的节目。
#include<iostream>
#include<string>
#include<cstring>
#include<iomanip>
#include<fstream>
using namespace std;
const int SIZE = 20;
void setAscendingSort(string [][], int);
//void setDescendingSort();
void displayArray(string [][]);
int main()
{
string first, last, NAMES[SIZE][2];
ifstream infile;
infile.open("names.dat");
int i = 0;
while (!infile.eof())
{
infile >> first;
NAMES[i][0] = first;
cout << NAMES[i][0] << " ";
if(infile.eof())
{
cout << endl;
break;
}
infile >> last;
NAMES[i][1] = last;
cout << NAMES[i][1] << " " << endl;
++i;
}
setAscendingSort(NAMES, SIZE);
cout << "The volues after the selection sort is performed are:" << endl;
displayArray(NAMES, SIZE);
return 0;
}
void displayArray(int array[][], int elems)
{
for (int count = 0; count < elems; count++)
cout << array[count][0] << " ";
cout << endl;
}
void setAscendingSort(string array[][], int elems)
{
int seek = 0;
int minCount; //location of smallest value found
int minValue; //holds the smallest value found
for (seek = 0; seek < (elems - 1); seek++)
{
minCount = seek;
minValue = array[seek][0];
for (int index = seek + 1; index < elems; index++)
{
if (array[index][0] < minValue)
{
minValue = array[index][0];
minCount = index;
}
}
array[minCount][0] = array[seek];
array[seek] = minValue;
}
}
我的意思是当我写这篇文章时,它对我来说完全有意义,但毕竟我是编程的新手。 :(