如何解决这种排序?

Posted

技术标签:

【中文标题】如何解决这种排序?【英文标题】:How to fix this sorting? 【发布时间】: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) 对于第一部分,声明它是赋值文本并使其成为块引用,它有一个按钮,但在每行的开头基本上是一个&gt;; (3) 删除注释掉的代码,因为它没有贡献,它只是噪音。 您的问题相当于“我的代码不起作用”,这是远远不够的。另外我不认为你是真的 Angelababy,虽然她很酷。 【参考方案1】:

很可能,您给myfile 提供了不正确的路径。我自己测试了代码,它按我的预期工作。如果我在正确的位置没有abc.txt,程序将运行并且没有输出。我想这就是您正在经历的,尽管“不起作用”有点含糊。

如果你在C: 中有一个abc.txt,我的下一个猜测是你的读取请求被操作系统拒绝,因为没有正确的权限访问那里的文件。尝试将文件放入您的文档文件夹中。

另外,rand 位于 &lt;cstdlib&gt;,而不是 &lt;random&gt;。虽然看起来&lt;random&gt; 肯定会包括&lt;cstdlib&gt;,但我不会依赖它。您还需要使用srand 播种它,或者(作为更好的选择)研究如何使用&lt;random&gt;。一开始会比较复杂,但会好很多。

【讨论】:

路径是你的文件所在的位置。假设您的操作系统完全像 Windows 一样,打开“abc.txt”的属性并复制完整路径应该可以修复它。只需将每个“\”替换为“\\”,然后使用该路径而不是现在程序中的路径。

以上是关于如何解决这种排序?的主要内容,如果未能解决你的问题,请参考以下文章

返回按日期排序的数据

Excel中进行表格出现死机的解决方法

重新排序包含目录如何解决宏重新定义问题?

如何解决这个 C++ 向量排序错误?

如何自定义这个已经自定义的 jQuery 排序解决方案?

如何解决“非法混合排序规则”SQLException?