如何修复这种排序
How to fix this sorting?
使用knuth优化的快速排序,其中快速排序对所有分区> k个元素进行操作。数组以这种方式部分排序,然后调用单个插入排序来优化结果。
使用pivot = x[随机元素]
给定以下格式的输入文件"abc.txt",读入数据并使用上面描述的排序对其进行排序。第一个数字是要排序的元素个数。
输入"abc.txt"为:
11
8 1 11 2 10 9 3 4 7 6 5
输出应该是一行按升序排列的数字。
这是我的代码,但它不工作。谁能给我一个帮助:
#include <fstream>
#include <iostream>
#include <random>
using namespace std;
void Qsort(int a[], int low, int high)
{
if(low >= high)
{
return;
}
int first = low;
int last = high;
int key = a[(rand() % (last - first + 1)) + first];
while(first < last)
{
while(first < last && a[last] >= key)
{
--last;
}
a[first] = a[last];
while(first < last && a[first] <= key)
{
++first;
}
a[last] = a[first];
}
a[first] = key;
Qsort(a, low, first-1);
Qsort(a, first+1, high);
}
int main()
{
std::fstream myfile("C:\abc.txt", std::ios_base::in);
int y = 0;
myfile >> y;
int a[100000] = {};
for (int i = 0; i < y; i++) {
myfile >> a[i];
}
Qsort(a, 0, y-1);
for(int i = 0; i < y ; i++)
{
cout << a[i] << " ";
}
system("pause");
return 0;
}
最有可能的是,您给myfile
一个不正确的路径。我自己测试了代码,结果和我预期的一样。如果在正确的位置没有abc.txt
,程序将运行并且没有输出。我猜这就是你所经历的,尽管"不起作用"有点模糊。
如果您在C:
中确实有abc.txt
,我的下一个猜测是您的读请求因为没有正确的权限来访问那里的文件而被操作系统击落。试着把文件放到你的文档文件夹里。
另外,rand
位于<cstdlib>
,而不是<random>
。虽然看起来<random>
肯定会包括<cstdlib>
,但我不会依赖它。您还需要使用srand
作为种子,或者(作为更好的替代方案)研究如何使用<random>
。一开始比较复杂,但效果好得多。
相关文章:
- 二叉排序树无法编译
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- C++选择排序算法中的逻辑错误
- Boost Graph Library,修复节点大小
- 使用C++程序合并排序没有得到正确的输出
- 计算排序向量的向量中唯一值的计数
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 排序算法c++
- 如何修复我的快速排序实现?
- 如何修复错误:使用向量查找最小值和最大值进行合并排序
- 如何修复输出显示,以便显示正确排序的数据
- c++:排序数组又名尝试修复选择排序
- 基数排序需要使用常量值进行修复
- 轻松修复 - 对多个值的 deque 进行排序
- 全局排序和每原子变量排序有何不同
- 我如何修复我的代码选择排序
- 如何修复这种排序
- 如何修复这个数组排序错误