使用Knuth优化的quicksort,其中quicksort在所有分区> k个元素上运行。数组以这种方式部分排序,然后调用单个插入排序来擦亮结果。如何解决这个问题?
使用枢轴= 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,虽然她很酷。 –