c++ - C++中的双向选择排序

标签 c++ sorting

我正在开发一个程序来对一个小数组进行排序。这是一项类作业,需要进行选择排序,但我想比它要求的更进一步。我以前做过选择排序,我想尝试实现一个双向版本。它有效,除了一个问题。我的第二个结果始终是第二个结果,并且从不排序。我觉得我错过了一些小而愚蠢的东西。

这是我的搜索功能的代码

void biSelSort(string engine[], double hits[]) {    
    int k = ARRAY_SIZE - 1;
    for (int i = 0; i < k; i++) {
        int min = i;
        int max = i;
        for (int j = i + 1; j <= k; j++) {
            if (hits[j] < hits[min]) {
                min = j;
            }
            if (hits[j] > hits[max]) {
                max = j;
            }
        }
        string tS = engine[min];
        double tD = hits[min];
        engine[min] = engine[i];
        hits[min] = hits[i];
        engine[i] = tS;
        hits[i] = tD;

        if (max == i) {
            tS = engine[min];
            tD = hits[min];
            engine[min] = engine[k];
            hits[min] = hits[k];
            engine[k] = tS;
            hits[k] = tD;
        } else {
            tS = engine[max];
            tD = hits[max];
            engine[max] = engine[k];
            hits[max] = hits[k];
            engine[k] = tS;
            hits[k] = tD;
        }
        i++;
        k--;
    }
}

最佳答案

你的意思是增加 i 两次,一次在你的 for 语句中,一次在你的循环结束时?如果你这样做了,你真的应该修改你的代码,这样你就只在一个地方做。

关于c++ - C++中的双向选择排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14369558/

相关文章:

c++ - 转换 View 的 std::prev 上的未定义行为

c++ - std::ctype 是否总是按 "C"语言环境对字符进行分类?

c++ - 什么是远帕斯卡?

C# array.sort() 按降序排列多个数组

JAVA 或 JAVA SCRIPT 或 Idoc SCRIPT 按字母顺序排序

javascript - native Array.prototype.sort() 和 _.sortBy() 以不同方式对值进行排序

c++ - 使用 extern "C"在 C 文件中调用 C++ 类函数

c++ - 如何获取用户输入并按变量排序?

mysql - 如何为列设置优先级并按该优先级对结果进行排序?

c++ - CMake 找不到 boost 库(CGAL、Windows)