以下冒泡排序的实现有什么问题
whats wrong with the following implementation of bubble sort
这是我的冒泡排序实现,为什么输出没有改变?输出与输入向量相同,而不是排序后的输出
#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
在该循环中是常量)。
用于按递增顺序对向量进行排序的编译和正常工作代码。
#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;
}
您试图仅在第 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;
}
这是我的冒泡排序实现,为什么输出没有改变?输出与输入向量相同,而不是排序后的输出
#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
在该循环中是常量)。
用于按递增顺序对向量进行排序的编译和正常工作代码。
#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;
}
您试图仅在第 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;
}