【发布时间】:2011-08-29 15:33:09
【问题描述】:
我正在编写一个简短的程序来对整数数组进行排序。我无法打开我的输入文件“prog1.d”。作业要求在程序目录中创建符号链接,我在创建对象和可执行文件后,按如下方式调用程序...
prog1.exe < prog1.d &> prog1.out
我知道我的冒泡排序工作正常且高效,因为我使用了自己的测试“txt”文件。
作业说:
您的程序从标准输入中获取随机整数并将它们放入一个数组中,将数组中的整数按升序排序,然后在标准输出上显示该数组的内容。
如何在 EOF 之前使用 'cin' 读取文件并将整数添加到我的数组 a[] 中?
到目前为止,这是我的代码:
int main( int argc, char * argv[] )
{
int a[SIZE];
for ( int i=1; i<argc; i++)
{
ifstream inFile; // declare stream
inFile.open( argv[i] ); // open file
// if file fails to open...
if( inFile.fail() )
{
cout << "The file has failed to open";
exit(-1);
}
// read int's & place into array a[]
for(int i=0; !inFile.eof(); i++)
{
inFile >> a[i];
}
inFile.close(); // close file
}
bubbleSort(a); // call sort routine
printArr(a); // call print routine
return 0;
}
我知道打开流是错误的方法,我只是将它用于我用来确保排序正常的测试“txt”文件。老师说我们应该把输入重定向到“cin”,就像有人在键盘上输入整数一样。
任何帮助将不胜感激。
【问题讨论】:
-
您的冒泡排序有效吗?这是一个矛盾。
-
大声笑,很好。我的意思是它按预期工作。更好?
-
@Benjamin Lindley:在极少数情况下,实施良好的冒泡排序优于所有其他常用排序算法。
-
@Nobody:你指的是鸡尾酒排序还是梳子排序?因为这些不再是冒泡排序了。
-
@Mooing Duck:不。我说的是气泡排序实现,它的平均案例复杂度为 O(n²),但在快速排序和其他需要 O(n log n) 的特殊情况下可以在 O(n) 中运行。一种这样的特殊情况是排序序列或每个第二个元素与其前一个元素交换位置的序列。