C ++中的指针数组排序算法

康纳

希望我能对我做的排序方法有所建议。

这只是对我正在制作的另一个程序的测试,而该测试有一个我无法弄清的错误。这段代码的目的是创建一个int指针数组,并根据常规int数组的内容对该数组中的指针进行排序。

该错误是针对我的第二个for循环的,该循环不允许我使用aj!=-1,因此不允许我对数组的第一个元素进行排序。请帮忙。谢谢!!

 //create array
 int c[8] = {3,1,5,7,8,2,6,4};
 //create pointer array
 int *newptr[8];
 for(int k = 0; k<8; k++)
 {
     newptr[k] = &c[k];
 }
//sort pointer array
for(int j = 0; j<8; j++)
{
    cout << "test1\n\n";
    cout << *newptr[j] << "and" << *newptr[j+1];
    for(;*newptr[j] < *newptr[j+1] && j!=0; j--) 
    //using j!=-1 doesn't work which causes me to not be able to sort the first element
    //in the array properly
    {
        cout<< "test2";
        int *temp;
        temp = newptr[j+1];
        newptr[j+1] = newptr[j];
        newptr[j] = temp;
    }
}**
疯狂

顺序很重要。

改变

for(;*newptr[j] < *newptr[j+1] && j!=0; j--) 

到:

for(; j != -1 && *newptr[j] < *newptr[j+1]; j--) 

大概该错误是导致代码崩溃的原因。发生这种情况是因为for循环中的表达式是从左到右求值的。因此检查是否*newptr[j]被评估之前j != -1因此可以想象,在某些时候,j它等于“-1何时*newptr[j]进行评估”,这是非法的。

更改顺序确实有所不同,其第二个原因是:短路评估

当评估两个由两个条件A和组成的表达式时B,C ++并不总是需要评估两个条件。

例如在声明中

if (A && B) {
  //do something 
}

如果A评估为false,则无论A && B评估结果true如何,显然都无法评估B因此,B永远不会检查的值。因此,在您的情况下,在表达式中

j != -1 && *newptr[j] < *newptr[j+1]

如果j != -1为假,则C ++无需评估表达式的其余部分即可知道整个表达式为假。因此,*newptr[j]永远不会发生,您也不会发现错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C ++中对指针数组进行排序

来自分类Dev

在C中对char指针数组进行排序

来自分类Dev

C中的递归未排序数组搜索算法?

来自分类Dev

如何在C ++中使用数组和指针实现插入排序算法?

来自分类Dev

C中的指针数组排序具有意外的输出

来自分类Dev

用指针对c中的数组进行排序

来自分类Dev

使用C中的指针按升序对数组进行排序

来自分类Dev

我正在尝试使用c ++中的向量来实现(算法简介(CLRS))中的合并排序算法,但数组未排序,

来自分类Dev

500,000个排序整数数组的C ++快速排序算法中的Seg Fault

来自分类Dev

C中的指针数组?

来自分类Dev

C ++中的数组指针

来自分类Dev

C ++中的指针数组

来自分类Dev

C ++中的数组指针

来自分类Dev

如何在Delphi中执行C ++参数数组指针算法

来自分类Dev

冒泡对函数中其他数组的指针数组进行排序(C)

来自分类Dev

在C-.exe中的数组中合并排序算法未运行?

来自分类Dev

C ++ 11中的空指针算法

来自分类Dev

递增整数指针的说明。C中的指针算法

来自分类Dev

指向C中的int指针数组的指针

来自分类Dev

用函数对数组进行排序而不使用 C 中的指针是行不通的。为什么?

来自分类Dev

C++中的冒泡排序算法

来自分类Dev

快速排序算法在c中的实现

来自分类Dev

指向C中数组的指针

来自分类Dev

C数组中的增量指针

来自分类Dev

C ++中的列表数组。指针; /

来自分类Dev

C程序中的数组指针

来自分类Dev

C中的Char数组指针

来自分类Dev

C ++中的双指针数组

来自分类Dev

C数组中的增量指针