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
排序功能在显示以下内容后返回此顺序:-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;
}
}
相关文章:
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- OpenGL/Glew C++纹理不适用
- 在不进行排序的情况下查找数组中n个最小值的索引
- 函数参数:不确定排序还是未排序?
- 当我在 windows7 中安装程序时,我指定的字体大小不适用
- accelerator.cu(8): 错误:属性"managed"在这里不适用?
- C++ 从向量中删除重复值而不进行排序
- 五个中三个最大参数的平均值,不使用排序算法或向量/数组
- typedef X=<T>T::UserType1,但如果不适用,typedef X<T>=UserType2
- 我应该在C++中使用 qsort 而不是排序吗?
- C++数组排序 - 将"bbba"和"0001"视为不正确排序的问题
- 用C++编写一个程序,对一个简单的序列求和:1/N + 2/N-1 + 3/N-2+ ...不适用
- std::atomic 是否提供原子行为,而不考虑排序?
- QAbstractTableModel最后一行为空,不进行排序
- 为什么是堆而不是排序的容器
- SFINAE在这里不适用吗?
- 在c++中不重复排序
- 当是复制和交换习语不适用
- 我试图实现合并排序算法从(介绍算法(CLRS))使用c++中的矢量,但数组不是排序,
- QMap,但不按键排序