0
 void insertionSort (int arrtosort[], int size)
{
 int temp = arrtosort[0];
 for(int i = 1; i < size; i++)
{
    temp = arrtosort[i];
    int j = 0;
    for(j = i; j > 0; j--)
        if(temp < arrtosort[j - 1])
           arrtosort[j] = arrtosort[j - 1];
        else break;
    arrtosort[j-1] =  temp;
}
}

我正在尝试使用此排序功能对案例内的 txt 文件进行排序。

我尝试的是

case 1:

        insertionSort(fileid,SIZE);
        ingrades.open("dataout.txt");
        for (idx=0;idx<SIZE;idx++)
        {
            int id,n_grade;
            string l_grade;
            ingrades>>id>>n_grade>>l_grade;
            for(int i=0;i<SIZE;i++)
            {
                if(fileid[i]==id)
                {
                    out.open("data.txt");
                    out<<id<<" "<<n_grade<<" "<<l_grade<<endl;
                    out.close();
                }
            }

        }
        ingrades.close();

    break;

我用这段代码尝试了不同的变体,不仅仅是写入 txt 文件,而是简单地在控制台中显示它

14731 4
15960 6
15517 8
16638 1
34974 6
32684 4
35157 2
33904 4
23132 7
37344 3

这些是我试图在我的程序中排序的数字字母等级在它遇到案例之前被写入它。我正在尝试做的是使用该功能对文件进行排序并将其写入 txt 文件,或者只是在控制台上显示所有帮助。

另一个问题是,当我使用该功能时,我似乎一遍又一遍地得到相同的数字,而不是所有的数字,就好像其余的被删除并被最大的数字代替

4

1 回答 1

0

读取文件,将键值对存储到 std::map 中,然后从头到尾迭代映射,将其内容写入文件。

诀窍是 std::map 自动为您排序数据,您甚至可以指定一个比较器!

地图根据它们的键进行排序。

如果您只想对数字进行排序,这里有一个来自 cplusplus.com 的示例

// sort algorithm example
#include <iostream>     // std::cout
#include <algorithm>    // std::sort
#include <vector>       // std::vector

bool myfunction (int i,int j) { return (i<j); }

struct myclass {
    bool operator() (int i,int j) { return (i<j);}
} myobject;

int main () {
    int myints[] = {32,71,12,45,26,80,53,33};
    std::vector<int> myvector (myints, myints+8);               // 32 71 12 45 26 80 53 33

    // using default comparison (operator <):
    std::sort (myvector.begin(), myvector.begin()+4);           //(12 32 45 71)26 80 53 33

    // using function as comp
    std::sort (myvector.begin()+4, myvector.end(), myfunction); // 12 32 45 71(26 33 53 80)

    // using object as comp
    std::sort (myvector.begin(), myvector.end(), myobject);     //(12 26 32 33 45 53 71 80)

    // print out content:
    std::cout << "myvector contains:";
    for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
        std::cout << ' ' << *it;
    std::cout << '\n';

    return 0;
}

输出:

myvector contains: 12 26 32 33 45 53 71 80

如果您想要更多值,只需将std::pair<int,int>其用于向量并创建您自己的比较函数,如示例中所示。

bool myfunction (std::pair<int,int> i,std::pair<int,int> j) { return (i.first<j.first); }
于 2013-05-22T01:53:32.047 回答