C++:为什么创建的向量没有传递到下一组 for 循环?

C++: Why is the created vector not passing to the next set of for loops?

我有它,让用户定义向量的大小,然后填充一个向量。然后使用冒泡排序(家庭作业)对该向量进行排序。但是,当显示 "sorted" 向量时,其中的数字与原始创建中的数字不同。我如何先创建矢量,显示它,然后排序并显示它??

#include <iostream>
#include <vector>
#include <cmath>
#include <numeric>
using namespace std;

int main()
{
    int n;
    double average=0.0;
    int median = 0;
    double size = 0.0;
    int i=0;

    cout<<"Vector Length?: "<<endl;
    cin>>n;
    vector<int> data;
    srand(time(NULL));


    //Filling vector
    for (int i=0; i<n; i++)
    {
        data.push_back(rand()%10+1);
    }
    for (int i=0; i<data.size(); i++)
    {
        cout<<"Vector: "<< data[i]<<endl;
    }

    size = data.size();

    //Sorting
    void bubbleSort(vector<int> & data);
    {
        for (int k = 1; k < size; k++)
        {
            for (int i = 0; i<size -1 - k; i++)
            {   
                if (data[i] > data[i +1])
                {
                    int temp = data[i];
                    data[i] = data[i + 1];
                    data[i + 1] = temp;
                }
                cout<<"Sorted vector: "<< data[i]<<endl;
            } 
        }               
    }   
  1. 如果您打算稍后定义函数 void bubbleSort(vector & data),您需要在调用它之前声明它。\

    void bubbleSort(vector<int> & data); int main() { // Here your code bubbleSort(data); //Here your code }

  2. 您只需要在需要之前定义变量。如果你声明并且从不使用它,你将得到未使用的变量警告。你可以更好地评论所有这些变量。您可以随时取消评论。

    //double average=0.0; //int median = 0;

  3. 您应该从 main() 调用函数 bubbleSort(),如下所示:

    bubbleSort(data);
    
  4. 您没有正确使用迭代器索引对 vector 的元素进行排序。如果您按如下方式更改函数 bubbleSort,它将起作用

//排序 void bubbleSort(vector<int> & 数据) { 整数大小 = data.size(); for (int k = 1; k < size; k++) { for (int i = 0; i<size -1 ; i++) {<br> 如果(数据[i] > 数据[k]) { int temp = 数据[i]; 数据[i] = 数据[k]; 数据[k] = 温度; } //cout<<"Sorted vector: "<< 数据[i]<<endl; } }<br> }

完整程序供大家参考:

#include <iostream>
#include <vector>
#include <cmath>
#include <numeric>
using namespace std;

 //Sorting
 void bubbleSort(vector<int> & data)
    {
         int size = data.size();
        for (int k = 1; k < size; k++)
        {
            for (int i = 0; i<size -1 ; i++)
            {   
                if (data[i] > data[k])
                {
                    int temp = data[i];
                    data[i] = data[k];
                    data[k] = temp;
                }
                //cout<<"Sorted vector: "<< data[i]<<endl;
            } 
        }               
    }   

int main()
{
    int n;
    //double average=0.0;
    //int median = 0;
    //double size = 0.0;
    //int i=0;

    cout<<"Vector Length?: "<<endl;
    cin>>n;
   // int n =10;
    vector<int> data;
    srand(time(NULL));


    //Filling vector
    for (int i=0; i<n; i++)
    {
        data.push_back(rand()%10+1);
    }
    for (unsigned int i=0; i<data.size(); i++)
    {
        cout<<"Vector: "<< data[i]<<endl;
    }


    bubbleSort(data);
    std::cout<<"sorted vector"<<"\n";
     for (unsigned int i=0; i<data.size(); i++)
    {
        cout<<"Vector: "<< data[i]<<endl;
    }

}
#include <iostream>
#include <vector>
#include <cmath>
#include <numeric>
using namespace std;

void printVector(vector<int> & data)
{
    for (int i=0; i<data.size(); i++)
    {
        cout<<"Vector: "<< data[i]<<endl;
    }
}

//Sorting
void bubbleSort(vector<int> & data);
{
    size = data.size();
    for (int k = 1; k < size; k++)
    {
        for (int i = 0; i<size -1 - k; i++)
        {   
            if (data[i] > data[i +1])
            {
                int temp = data[i];
                data[i] = data[i + 1];
                data[i + 1] = temp;
            }
        } 
    }               
}   

int main()
{
    int n;
    double average=0.0;
    int median = 0;
    double size = 0.0;
    int i=0;

    cout<<"Vector Length?: "<<endl;
    cin>>n;
    vector<int> data;
    srand(time(NULL));


    //Filling vector
    for (int i=0; i<n; i++)
    {
        data.push_back(rand()%10+1);
    }
    printVector(data);
    bubbleSort(data);
    printVector(data);

}

首发:

  1. 确保包含所有必要的头文件,例如stdlib.h 用于您使用的 rand() 函数。
  2. 删除所有未使用的变量,例如 averagemediansize
  3. main 函数之外声明您的 bubbleSort 函数,并添加额外的检查代码以防止在列表不超过一个元素时进行排序。

排序问题与您的这段代码有关:

for (int i = 0; i<size -1 - k; i++) { ... }

Simply remove -1

要解决排序问题并获得更好的输出,请使用以下代码:

#include <iostream>
#include <stdlib.h>
#include <vector>
#include <cmath>

using namespace std;

void bubbleSort(vector<int>& data)
{
    if(data.size() <= 1)
        return;

    for(int i=1; i<data.size(); i++)
    {
        for(int j=0; j<data.size()-i; j++)
        {
            if(data.at(j) > data.at(j+1))
            {
                int temp = data.at(j+1);
                data.at(j+1) = data.at(j);
                data.at(j) = temp;
            }
        }
    }
}

int main()
{
    int n;
    vector<int> data;

    cout << "Vector Length?: ";
    cin >> n;

    // Filling vector
    for(int i=0; i<n; i++)
        data.push_back(rand()%10+1);

    cout << "Vector: ";
    for(int i=0; i<data.size(); i++)
        cout << data.at(i) << ", ";

    // Sorting
    bubbleSort(data);

    cout << endl << "Sorted Vector: ";
    for(int i=0; i<data.size(); i++)
        cout << data.at(i) << ", ";

    return 0;
}

希望对您有所帮助 ;)