下面的冒泡排序实现有什么问题?

whats wrong with the following implementation of bubble sort

本文关键字:什么 问题 实现 冒泡排序      更新时间:2023-10-16

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

    #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;
}

在测试中,您使用的是i,而不是最有可能使用j(因为i在该循环中是恒定的)。

按递增顺序对vector进行排序的编译和正常工作的代码。

#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;
}

您试图仅使用索引进行交换。

#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;
}