如何修复这种排序

How to fix this sorting?

本文关键字:排序 何修复      更新时间:2023-10-16

使用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>。一开始比较复杂,但效果好得多。