冒泡排序c语言从大到小:c++ 向量冒泡排序(vector bubbles)

关于冒泡排序c语言从大到小的问题,在vector bubbles中经常遇到, 我使用 g ++-std = c ++ 11 Sort.cpp 来编译我的文件。

我使用 g ++-std = c ++ 11 Sort.cpp 来编译我的文件。

我的问题是冒泡排序不排序。

也许我通过值传递向量,但我不知道是密切我的第一次尝试与 c ++ 的工作,我选择使用矢量库。

我的代码是:

#include <iostream>
#include <vector>
using namespace std;
void bubbleSort(vector<int> a);
void printVector(vector<int> a);
int main(int argc, char const *argv[])
{
    vector<int> a{3,2,6,1};
    printVector(a);
    bubbleSort(a);
    printVector(a);
}
void bubbleSort(vector<int> a)
{
    bool swapp = true;
    while(swapp)
    {
        swapp = false;
        for (int i = 0; i < a.size()-1; i++)
        {
            if (a[i]>a[i+1] )
            {
                a[i] += a[i+1];
                a[i+1] = a[i] - a[i+1];
                a[i] -=a[i+1];
                swapp = true;
            }
        }
    }
}
void printVector(vector<int> a)
{
    for (int i=0;  i <a.size();  i++)
    {
        cout<<a[i]<<" ";
    }
    cout<<endl;
}

在 main 中,我声明一个 int 的向量类型,并使列表 {3,2,6,1}

之后,e 调用函数printVector在控制台上假装打印矢量的所有数字,并调用bubbleSort函数,最后再次打印。

10

您需要通过引用传递;通过制作副本,您对临时副本进行排序,然后就是这样;它消失了,原始仍然是未排序的,因为,再次,您只排序了整个向量的临时副本。

So changevector<int>atovector<int>&a.

这里的代码,固定的:

http://coliru.stacked-crooked.com/a/2f118555f585ccd5
#include <iostream>
#include <vector>
using namespace std;
void bubbleSort(vector<int>& a);
void printVector(vector<int> a);
int main(int argc, char const *argv[])
{
 vector<int> a {3,2,6,1};
 printVector(a);
 bubbleSort(a);
 printVector(a);
}
void bubbleSort(vector<int>& a)
{
      bool swapp = true;
      while(swapp){
        swapp = false;
        for (size_t i = 0; i < a.size()-1; i++) {
            if (a[i]>a[i+1] ){
                a[i] += a[i+1];
                a[i+1] = a[i] - a[i+1];
                a[i] -=a[i+1];
                swapp = true;
            }
        }
    }
}
void printVector(vector<int> a){
    for (size_t i=0;  i <a.size();  i++) {
        cout<<a[i]<<" ";
    }
  cout<<endl;
}
2

您将向量作为值传递给您的函数,这意味着您正在排序副本,而不是原始向量,然后打印原始向量的副本。

bubbleSort函数中将参数更改为vector<int> &a,在printVector函数中将参数更改为vector<int> const &a(因为您不需要从此处更改向量内容)。

顺便说一下,您的代码可能会受到签名者整数溢出导致的未定义行为的影响,您应该使用另一种方法来交换您的元素,std::swap例如:

std::swap(a[i], a[i + 1]);
0

我也被卡住了一段时间。这个问题已经被 VermillionAzure 很好地回答了,但仍然粘贴我的解决方案。我不使用 std::swap 只是因为我喜欢用手做更多。

#include <iostream>
#include <vector>
//function to swap values
//need to pass by reference to sort the original values and not just these copies
void Swap (int *a, int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}
void BubbleSort (std::vector<int> &array)
{
    std::cout<<"Elements in the array: "<<array.size()<<std::endl;
    //comparisons will be done n times
    for (int i = 0; i < array.size(); i++)
    {
        //compare elemet to the next element, and swap if condition is true
        for(int j = 0; j < array.size() - 1; j++)
        {   
            if (array[j] > array[j+1])
                Swap(&array[j], &array[j+1]);
        }
    }
}
//function to print the array
void PrintArray (std::vector<int> array)
{
    for (int i = 0; i < array.size(); i++)
        std::cout<<array[i]<<" ";
    std::cout<<std::endl;
}
int main()
{
    std::cout<<"Enter array to be sorted (-1 to end)\n";
    std::vector<int> array;
    int num = 0;
    while (num != -1)
    {
        std::cin>>num;
        if (num != -1)
            //add elements to the vector container
            array.push_back(num);
    }
    //sort the array
    BubbleSort(array);
    std::cout<<"Sorted array is as\n";
    PrintArray(array);
    return 0;
}

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(879)
57圈口的手镯相当于多少cm:iex相当于rp是多少(what's a rp)
上一篇
Cameralink传输距离:延长 Android智能手机的蓝牙传输距离
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(49条)