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;
}
}
以下代码对二维指针数组的一列进行排序:
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;
}
}