C ++⎼两个相似的功能,但执行方式却大不相同

奇怪的

我正在编写一个快速排序程序。为此,我需要对数组进行分区。分区由一个函数完成paritionIt()我写了一个对数组进行分区的代码,如下所示:

int partition(int beg,int end,double key)
{
    int pLeft = beg;
    int pRight = end-1;
    while(pLeft<pRight)
    {
        while(array[++pLeft]<key);
        while(array[--pRight]>key);
        if(pLeft<pRight)
            swap(pLeft,pRight);
    }
    swap(pLeft,end-1);
    return pLeft;
}

单独执行此块似乎可以正常工作。但是,当与其他功能一起运行时,似乎会产生错误的答案。以下提供给我的代码使所有问题都消失了,但与我的代码似乎并没有太大不同。

int partitionIt(int left, int right, double pivot)
{
    int leftMark = left; //right of first elem
    int rightMark = right - 1; //left of pivot
    while(true)
    {
        while( theVect[++leftMark] < pivot ) //find bigger
        ; // (nop)
        while( theVect[--rightMark] > pivot ) //find smaller
        ; // (nop)
        if(leftMark >= rightMark) //if pointers cross,
            break; // partition done
        else //not crossed, so
            swap(leftMark, rightMark); //swap elements
    } //end while(true)
    swap(leftMark, right-1); //restore pivot
    return leftMark; //return pivot location
} //end partitionIt()

这个障碍似乎与我的相似,但是给出了正确的答案,而我的却不是。你能告诉什么之间的区别请我partition()partitionIt()

凯文

区别在于您要突破循环结构。

在您的代码中,您进行了两个条件检查,而在给定的代码中,您仅进行了一个条件检查。

假设您已经在循环中迭代了一段时间。(无双关语意)。

您将点击以下代码:

 if(pLeft<pRight)
                swap(pLeft,pRight);

然后,您将到达while循环的底部,回到顶部,然后再次检查是否为pLeft<pRight如果不是这样,我们退出循环。

在给定的代码中,执行交换,但随后执行以下操作:

while( theVect[++leftMark] < pivot ) //find bigger
    ; // (nop)
    while( theVect[--rightMark] > pivot ) //find smaller
    ; // (nop)

然后检查是否跳出循环。

这似乎就是区别所在。

编辑:要澄清-如果while(pLeft>=pRight)您第一次进入循环会发生什么

在给定的代码中,您将继续执行while循环直到中断为止,但是在您的代码中,您永远不会进入循环的主体。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

几乎相同的代码,但答案却大不相同

来自分类Dev

几乎相同的代码,但答案却大不相同

来自分类Dev

C ++避免编写两个相似的函数

来自分类Dev

C ++ ----比较两个数组中的元素并显示什么是不相似的值

来自分类Dev

Javascript - 多个按钮的代码几乎相同,但结果却大不相同

来自分类Dev

Postgres索引对原始SQL和ActiveRecord查询的影响大不相同

来自分类Dev

将Tensorflow代码转换为Pytorch-性能指标大不相同

来自分类Dev

为什么ps aux与top的cpu用法大不相同

来自分类Dev

Pandas wide_to_long 的行为与 Python 2.7 中的先前版本大不相同

来自分类Dev

Gatsby 网站在 Firefox 上的外观和功能与其他浏览器大不相同 - JavaScript 被禁用?

来自分类Dev

C ++,以并行和协作方式运行两个功能

来自分类Dev

C ++,以并行和协作方式运行两个功能

来自分类Dev

c中具有相同功能的两个声明

来自分类Dev

比较相同功能的两个C实现

来自分类Dev

比较相同功能的两个C实现

来自分类Dev

对于两个相似但不相同的数据列,需要一个VLOOKUP公式

来自分类Dev

为什么两个指针值不相同?

来自分类Dev

在两个表中查找不相同的文本

来自分类Dev

为什么两个地块不相同

来自分类Dev

在C#中创建两个非常相似的软件包有哪些不同的方法

来自分类Dev

C / C ++的两个宏功能

来自分类Dev

如何在SQL中使用两个相似的参数执行搜索功能

来自分类Dev

与C ++模板功能相似的Java方法

来自分类Dev

匹配两个或两个以上不相同的字符

来自分类Dev

Scanf在C中获取的数据量不相同

来自分类Dev

在C中复制后,文件校验和不相同

来自分类Dev

在C ++中以相同的方式同时划分两个元素范围

来自分类Dev

为什么示例Where2GetIt的URL相同,而台式机,Android浏览器和android Webview的结果却大不相同?

来自分类Dev

比较两个结构相同但数据不相同的Access表

Related 相关文章

  1. 1

    几乎相同的代码,但答案却大不相同

  2. 2

    几乎相同的代码,但答案却大不相同

  3. 3

    C ++避免编写两个相似的函数

  4. 4

    C ++ ----比较两个数组中的元素并显示什么是不相似的值

  5. 5

    Javascript - 多个按钮的代码几乎相同,但结果却大不相同

  6. 6

    Postgres索引对原始SQL和ActiveRecord查询的影响大不相同

  7. 7

    将Tensorflow代码转换为Pytorch-性能指标大不相同

  8. 8

    为什么ps aux与top的cpu用法大不相同

  9. 9

    Pandas wide_to_long 的行为与 Python 2.7 中的先前版本大不相同

  10. 10

    Gatsby 网站在 Firefox 上的外观和功能与其他浏览器大不相同 - JavaScript 被禁用?

  11. 11

    C ++,以并行和协作方式运行两个功能

  12. 12

    C ++,以并行和协作方式运行两个功能

  13. 13

    c中具有相同功能的两个声明

  14. 14

    比较相同功能的两个C实现

  15. 15

    比较相同功能的两个C实现

  16. 16

    对于两个相似但不相同的数据列,需要一个VLOOKUP公式

  17. 17

    为什么两个指针值不相同?

  18. 18

    在两个表中查找不相同的文本

  19. 19

    为什么两个地块不相同

  20. 20

    在C#中创建两个非常相似的软件包有哪些不同的方法

  21. 21

    C / C ++的两个宏功能

  22. 22

    如何在SQL中使用两个相似的参数执行搜索功能

  23. 23

    与C ++模板功能相似的Java方法

  24. 24

    匹配两个或两个以上不相同的字符

  25. 25

    Scanf在C中获取的数据量不相同

  26. 26

    在C中复制后,文件校验和不相同

  27. 27

    在C ++中以相同的方式同时划分两个元素范围

  28. 28

    为什么示例Where2GetIt的URL相同,而台式机,Android浏览器和android Webview的结果却大不相同?

  29. 29

    比较两个结构相同但数据不相同的Access表

热门标签

归档