如何在没有C ++库排序功能的情况下对此打印矢量进行排序?

时间:2014-06-09 21:43:39

标签: c++ file sorting input vector

在学习如何从数字输入文件中打印矢量后,我现在正在尝试学习如何使用算法而不是排序(arr.begin(),arr.end())函数对这些数字进行排序。这是我的排序算法:

for (i = 0; i < n-1; i++)
    for (j = i+1; j < n; j++)
        if (arr[i] > arr[j])
            swap(arr[i], arr[j]);

我的代码:

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;


int main()
{
    vector<int> arr;

    ifstream infile;
    infile.open("numbers.txt");

    if (infile.fail())
    {
        cout << "Could not open file numbers." << "\n";
        return 1;
    }

    int i;
    int j;
    int n;
    int data;
    infile >> data;
    while (!infile.eof())
    {
        arr.push_back(data);
        infile >> data;
    }

    for (i = 0; i < n-1; i++)
        for (j = i+1; j < n; j++)
            if (arr[i] > arr[j])
                swap(arr[i], arr[j]);

    for (unsigned i = 0; i < arr.size(); ++i) 
    {
        cout << arr[i] << " " << endl;
    }

}

使用此输入文件:

20
10
5
15
35
40
25
30

我相信我的问题与i,n,&amp; j被宣布,但无法弄清楚过去的事情。我希望提供的信息足够。我对此非常陌生。谢谢。

2 个答案:

答案 0 :(得分:0)

您忘记初始化并增加(或设置)n的值。

使用

int n = 0;
while (!infile.eof()) {
  arr.push_back(data);
  infile >> data;
  n++;
}

int n = 0;
while (!infile.eof()) {
  arr.push_back(data);
  infile >> data;
}
n = arr.size();

我不知道您对排序算法有多了解,但这可能很有价值:http://sorting.at/

答案 1 :(得分:0)

一旦n初始化为arr.size(),就会有效:(https://ideone.com/aNCwN6)。