C++:二维指针数组排序:选择排序对某些实例不起作用

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

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

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

排序功能returns显示后的顺序为:-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;
    }
}