C++:二维指针数组排序:选择排序不适用于某些实例

C++ : 2-D Pointer Array Sorting: Selection Sort doesn't work for certain instance

本文关键字:不适用 排序 适用于 实例 选择 指针 C++ 二维 数组排序      更新时间:2023-10-16

以下代码对二维指针数组的一列进行排序:

void sort(int** rowReferences, int rowCount, int colCount, int sortColumn) {
    int pos, lower, temp;
    for (int p = 0; p < rowCount; p++)
    {
        pos = p;
        lower = rowReferences[p][sortColumn];
        for (int j = p + 1; j < rowCount; j++) {
            if (rowReferences[j][sortColumn] < lower) {
                pos = j;
                lower = rowReferences[j][sortColumn];
            }
        temp = rowReferences[p][sortColumn];
        rowReferences[p][sortColumn] = rowReferences[pos][sortColumn];
        rowReferences[pos][sortColumn] = temp;
        }
    }
}

它在大多数情况下都有效,但在某个列中并不完全正确。

列值按以下顺序排列:2、0、-1、1、3

排序功能在显示以下内容后返回此顺序:-1,0,2,1,3

正如您所看到的,排序适用于前两个值,但之后会崩溃。如何修改选择排序以在这种情况下工作?

编辑*PaulMcKenzie慷慨提供的最小、完整、可验证的示例:http://ideone.com/lXHFHE

这部分代码

 temp = rowReferences[p][sortColumn];
 rowReferences[p][sortColumn] = rowReferences[pos][sortColumn];
 rowReferences[pos][sortColumn] = temp;

必须在范围之外:)

最终代码:

void sort(int** rowReferences, int rowCount, int colCount, int sortColumn) {
    int pos, lower, temp;
    for (int p = 0; p < rowCount; p++)
    {
        pos = p;
        lower = rowReferences[p][sortColumn];
        for (int j = p + 1; j < rowCount; j++) {
            if (rowReferences[j][sortColumn] < lower) {
                pos = j;
                lower = rowReferences[j][sortColumn];
            }
        }
        temp = rowReferences[p][sortColumn];
        rowReferences[p][sortColumn] = rowReferences[pos][sortColumn];
        rowReferences[pos][sortColumn] = temp;
    }
}