为什么在对二维数组进行排序时指针不能正常工作?

时间:2018-10-05 22:31:38

标签: c++

我使用此代码,但运行错误。它对一些数据进行排序,但其余数据 排序不正确。我想知道此代码中的错误在哪里,为什么?

git reset origin/dev

2 个答案:

答案 0 :(得分:0)

在访问位于数组范围内的元素时要当心。

for(int j=i+1;j <= col;j++){行试图访问循环到数组中的最后一个元素时不存在的i+1 st 元素,因此可以避免通过使用for(int j=i+1;j < col;j++){循环到倒数第二个元素。

此外,您将要为2D数组中的每个数组迭代排序算法。

因此您可以执行以下操作:

for(int n=0;n < row;n++){
    for(int i=0;i < row;i++){
        for(int j=i+1;j < col;j++){
            if(*(*(mat + n) + i) >= *(*(mat + n) + j)){
                int temp= *(*(mat + n) + i);
                *(*(mat + n) + i) = *(*(mat + n) + j);
                *(*(mat + n) + j) = temp;
            }
        }
    }
}

答案 1 :(得分:0)

尚不清楚您想要的排序规则是什么,但是,假设需要任何合理一致的排序,也许您会接受将数组转换为一维数组或指针,并使用诸如qsort或std :: sort ...一直在争论是否导致未定义的行为,或者数组包装的规则是否确保始终定义良好-如果您相信后者,那么这可能是您的答案。