【发布时间】:2015-09-12 23:55:21
【问题描述】:
使用 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;
}
【问题讨论】:
-
std::sort很不错。通常比 DIY 解决方案更好,而且工作量肯定更少。无论如何,我认为问题属于代码审查网站,而不是这里,因为它与语言无关,而与算法的实现有关。 -
我建议对问题进行以下改进(无论是否移动):(1)详细说明“不起作用”,提供示例输入、预期输出、实际输出; (2) 对于第一部分,声明它是赋值文本并使其成为块引用,它有一个按钮,但在每行的开头基本上是一个
>; (3) 删除注释掉的代码,因为它没有贡献,它只是噪音。 -
您的问题相当于“我的代码不起作用”,这是远远不够的。另外我不认为你是真的 Angelababy,虽然她很酷。
标签: c++ visual-studio visual-c++ visual-c++-2010