使用选择排序按字母顺序排序名称

时间:2014-04-06 22:01:41

标签: c++ arrays sorting

我正在做作业,要求我使用选择排序按字母顺序(升序和降序)对名称进行排序。所以有一个数据文件,其中保存了所有名称,它被称为“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;
    }
}

我的意思是当我写这篇文章时,它对我来说完全有意义,但毕竟我是编程的新手。 :(

0 个答案:

没有答案