【问题标题】:whats wrong with the following implementation of bubble sort以下冒泡排序的实现有什么问题
【发布时间】:2016-09-25 06:47:11
【问题描述】:

这是我对冒泡排序的实现,为什么输出不变?输出与输入向量相同,而不是排序后的输出

    #include<iostream>
    #include<vector>
    #include<algorithm>


    void bubble_sort(std::vector<int> &v){
        for( int i = 0; i < (v.size() - 1); i++){
            for( int j = 0; j < (v.size() - 1 - i) ; j++){
                if(v[i] < v[i+1]){
                    std::swap(v[i], v[i+1]);
                }
            }
        }

    }


int main(){
    std::vector<int> v = {1,9,8,7,6,5,3,2};
    bubble_sort(v);

    for(auto &e : v){
        std::cout<<e<<" ";
    }

    return 0;
}

【问题讨论】:

  • 错误的括号:if(v[i])
  • 首先,您显示的代码不会构建。其次,学习如何使用调试器。使用调试器,您可以逐行遍历代码并查看发生了什么,并能够监视变量及其值。
  • @JoachimPileborg 代码构建完美。我同意使用错误的参数 i 而不是 j 是我的错误。感谢我从现在开始使用调试器
  • 修复编译错误后,它对特定输入进行排序,但不会对{1,2,3}进行排序。
  • @molbdnilo 你能解释一下吗

标签: c++ sorting bubble-sort


【解决方案1】:

在测试中,您使用的是i,而您很可能想使用j(因为i 在该循环中是常量)。

【讨论】:

    【解决方案2】:

    用于按升序对向量进行排序的编译和正常工作代码。

    #include<iostream>
    #include<vector>
    #include<algorithm>
    
    
    void bubble_sort(std::vector<int> &v){
        for( int i = 0; i < (v.size() - 1); i++){
            for( int j = 0; j < (v.size() - 1 - i) ; j++){
                if ( v[j] > v[j+1] ){
                    std::swap(v[j], v[j+1]);
                }
            }
        }
    
    }
    
    int main(){
        std::vector<int> v = {1,9,8,7,6,5,3,2};
        bubble_sort(v);
    
        for(auto &e : v){
            std::cout<<e<<" ";
        }
    
        return 0;
    }
    

    【讨论】:

      【解决方案3】:

      您试图仅在第 i 个索引之间进行交换。出了问题。

      #include<iostream>
      #include<vector>
      #include<algorithm>
      void bubble_sort(std::vector<int> &v){
          for( int i = 0; i < (v.size() - 1); i++){
              for( int j = 0; j < (v.size() -1 - i) ; j++){
                  if(v[j] > v[j+1]){
                      std::swap(v[j], v[j+1]);
                  }
              }
          }
      }
      int main(){
          std::vector<int> v = {1,9,8,7,6,5,3,2};
          bubble_sort(v);
          for(auto &e : v){
              std::cout<<e<<" ";
          }
          return 0;
      }
      

      【讨论】:

      • 为什么要按降序排列。如果没有给出任何内容,排序意味着默认增加顺序。
      • 是的!我做错了,我解决了这个问题。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-29
      • 2017-03-11
      • 2012-07-23
      • 2023-03-29
      • 2020-12-19
      相关资源
      最近更新 更多