大家能帮我看看这个冒泡为啥没有排序效果吗

冒泡排序

void BubbleSort(vector<int> arr,int length);

int main(int argc, char** argv) {
    
    int n;
    vector<int> arr;
    vector<int>::iterator i;

    cin >> n;
    arr.resize(n);
    for(i=arr.begin();i<arr.end();i++){
        cin >> *i;
    } 
    
    BubbleSort(arr,n);
    for(i=arr.begin();i<arr.end();i++){
        cout << *i << " ";
    }
    return 0;
}

void BubbleSort(vector<int> arr,int length)
{
    for(int i=0;i<length;i++){
        for(int j=0;j<length-i-1;j++){
            if(arr[j]>arr[j+1]){
                int temp;
                temp=arr[j+1];
                arr[j+1]=arr[j];
                arr[j]=temp;
            }
        }
    }
}


输入
5
23
34
1
2
3
输出23 34 1 2 3

你函数定义有问题。应该使用传地址。不应该使用值传入。值传入只会复制一份值。最终你的数组不会改变。
代码:

#include <iostream>
#include <stdio.h>
#include <vector>
#include <string.h>

using namespace std;


void BubbleSort(vector<int> &arr,int length);

int main(int argc, char** argv) {

    int n;
    vector<int> arr;
    vector<int>::iterator i;

    cin >> n;
    arr.resize(n);
    for(i=arr.begin();i<arr.end();i++){
        cin >> *i;
    }

    BubbleSort(arr,n);
    for(i=arr.begin();i<arr.end();i++){
        cout << *i << " ";
    }
    return 0;
}

void BubbleSort(vector<int> &arr,int length)
{
    for(int i=0;i<length-1;i++){
        for(int j=0;j<length-i-1;j++){
            if(arr[j]>arr[j+1]){
                int temp;
                temp=arr[j+1];
                arr[j+1]=arr[j];
                arr[j]=temp;
            }
        }
    }
}

img