插入排序启动

时间:2015-09-21 15:01:25

标签: c++ insertion-sort

我是全新的堆栈溢出,所以感谢大家耐心帮助我处理我的问题。我正在用C ++编写一个程序,它通过对.txt文件中的数字进行排序来实现插入排序。它接受一个文件,显示内容,然后询问用户是否要对数字进行排序。当我键入“y”时,它应该在我的代码中启动插入排序算法。但是现在它所做的只是完成编译。任何意见是极大的赞赏。

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

//Read file input and display contents
ifstream& readfile(ifstream& file)
{
    string line;
    if (getline(file, line))
    {
        cout << line;
    }
    return file;
}

int main()
{
    string fileName, line, r;
    int n, i, j, k, temp;
    int a[n];
    ifstream fs;

    cout << "enter file: ";
    cin >> fileName;

    ifstream file(fileName);
    if (file.is_open())
    {
        while (readfile(file))
        {
        }
    }
    cout << endl << endl << "Sort File? y or n? ";
    cin >> r;
    if (r == "y")
    {
        for (i = 0; i < n; i++)
        {
            cin >> a[i];
        }
        for (i = 1; i < n; i++)
        {
            for (j = i; j >= 1; j--)
            {
                if (a[j] < a[j - 1])
                {
                    temp = a[j];
                    a[j] = a[j - 1];
                    a[j - 1] = temp;
                }
                else
                {
                    break;
                }
            }
        }
        for (k = 0; k < n; k++)
        {
            cout << a[k] << endl;
        }
    }
    else
    {
        cout << endl << "error" << endl;
    }

    cin.get();
    return 0;
}

1 个答案:

答案 0 :(得分:0)

n未初始化。

for (i=0;i<n;i++) 
{
  cin >> a[i];
}

这里没有任何事情发生,因为(如果你很幸运......)n = 0。 如果只需要5个条目,则将n初始化为5.

  • 使用像std :: vector这样的STL容器,例如你在这里使用C语言......
  • 当用户初始化插入时,在您的循环中更改结束条件

例如,如果用户插入“停止”字:

std::vector<int> vIntegers; 
std::string input; 
int n = 0; 

while ( input != "stop") 
{ 
   std::cin >> input; 
   // test if integer here 
   { 
      vIntegers.push_back(n); 
   } 
}

这里是测试字符串是否为整数的帖子 How do I check if a C++ string is an int?