我目前使用此代码进行冒泡排序:
#include <iostream>
#include <vector>
using namespace std;
void bubbleSort(vector<int>& numbers){
bool notFin = true;
int temp = 0;
while(notFin){
notFin = false;
for (int i = 0; i< numbers.size(); i++) {
if (numbers[i]>numbers[i+1] ){
temp = numbers[i];
numbers[i] = numbers[i+1];
numbers[i+1] = temp;
notFin = true;
}
}
}
}
void printVector(vector<int>& numbers){
for (int i=0; i<numbers.size(); i++) {
cout<<numbers[i]<<" ";
}
cout<<endl;
}
int main() {
vector<int> numbers;
int n = 0;
cout << "enter integers to bubble sort end with -1\n";
while (n != -1) {
cin >> n;
numbers.push_back(n);
}
numbers.pop_back();
printVector(numbers);
bubbleSort(numbers);
printVector(numbers);
}
当我输出结果时,我仍然在前面看到-1并且最高值消失。如何从向量中删除-1,以便在第二次打印后不输出并推出向量中的最高值?
答案 0 :(得分:2)
您正在向量外访问。当您到for
中的bubbleSort()
循环的最后一次迭代时,numbers[i]
是向量的最后一个元素,numbers[i+1]
在外面。这导致了未定义的行为,在您的情况下,它恰好访问了您最初放入向量中的-1
,然后弹出。
更改循环以使用i < numbers.size()-1
作为重复测试。
您还可以修复输入循环,这样您就不会首先将-1
放入向量中。
while (cin >> n && n != -1) {
numbers.push_back(n);
}