动态确定大小数组的冒泡排序方法

Bubble sort method for array with dynamically determined size

我正在尝试对具有动态确定大小的数组使用冒泡排序方法。这是代码:

#include <iostream>

using namespace std;

int main()
{
    int n;
    cout<<"Enter n";
    cin>>n;
    int arr[n],swap;
    cout<<"Enter number"<<endl;
    cin>>arr[n];
    for(int i=0;i<n-1;i++)
    for(int j=0;i<n-i-1;j++)
        if(arr[j]>arr[j+1])
    {
        swap=arr[j];
        arr[j]=arr[j+1];
        arr[j+1]=swap;
    }
    for(int k=0;k<n;k++)
        cout<<"arr["<<k<<"]="<<arr[k]<<endl;
    return 0;
}

当我以这种方式定义数组的元素时,程序运行:

const n=5;
int arr[n]={1,2,3,4,5)

但我需要从键盘输入数组的大小 (n) 及其元素。但是当我 运行 我的代码时,程序在我输入第一个数字后崩溃。有办法解决吗?

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    int n, swap, temp;
    vector<int> arr;
    cout<<"Enter n";
    cin>>n;

    // Loop and accept the n values.
    // You may need to take care of the new line.
    for(int i = 0; i < n; ++i)
    {
        cout << "Enter a number : ";
        cin >> temp;
        arr.push_back(temp);
    }

    for(int i=0;i<n-1;i++)
    for(int j=0;j<n-i-1;j++)
        if(arr[j]>arr[j+1])
    {
        swap=arr[j];
        arr[j]=arr[j+1];
        arr[j+1]=swap;
    }
    for(int k=0;k<n;k++)
        cout<<"arr["<<k<<"]="<<arr[k]<<endl;
    return 0;
}

注意如何使用循环从用户中提取 n 值。此外,使用 std::vector 可以让您免于使用 newdelete.

为运行时大小的数组编写代码

此外,您的内部循环正在检查 i<n-i-1 并递增 j,它应该是 j<n-i-1,否则 j 将无限递增直到 INT_MAX

如我的评论所述,您不能在 C++ 中动态声明数组的大小(如果您愿意,请使用 std::vector)。

然后您可以这样做:

....
cin >> n;
vector<int> arr(n); // reserves space for `n` integers in the memory
....

关键词是动态分配。在 C 中,函数是 malloc。在cpp中,可以new和delete。 vector虽然可以很好的工作,但它只是STL的一种方法。请注意,我的代码可能存在安全问题。

#include <iostream>

using namespace std;

int main()
{
    int n,temp;
    cout<<"Enter n:";
    cin>>n;
    //dynamic allocation
    int *arr=new int[n];
    cout<<"Enter number."<<endl;
    for(int i=0;i<n;i++){
        cin>>arr[i];
    }
    //bubble sort
    for(int i=0;i<n;i++){
        for(int j=i;j<n;j++){
            if(arr[i]>arr[j]){
                temp=arr[i];
                arr[i]=arr[j];
                arr[j]=temp;
            }
        }
    }
    //output the array
    for(int i=0;i<n;i++){
        cout<<"arr["<<i<<"]="<<arr[i]<<endl;
    }
    delete [] arr;
    return 0;
}

你不能采用这样的整数数组,你需要 运行 一个循环。你可以像那样拿 string 。冒泡排序逻辑也有很多错误,试试下面的代码片段。它应该工作正常。您需要为 arr

动态分配数组
int n,r,swap,i,*arr;
cout<<"Enter n\n";
cin>>n;
arr = (int *)malloc((n)*sizeof(int));
cout<<"Enter numbers\n"<<n<<endl;
for(i=0;i<n;i++)
{
    cin>>arr[i];

}
for(i=0;i<n;i++)
{
    for(int j=0;j<n-1;j++)//You're checking for i. you need to check for j
    {
        if(arr[j+1]<arr[j])
        {
            swap=arr[j];
            arr[j]=arr[j+1];
            arr[j+1]=swap;
        }
    }
}
//now print your arr

包括:#include<stdlib.h>