动态确定大小数组的冒泡排序方法
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
可以让您免于使用 new
和 delete
.
为运行时大小的数组编写代码
此外,您的内部循环正在检查 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>
我正在尝试对具有动态确定大小的数组使用冒泡排序方法。这是代码:
#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
可以让您免于使用 new
和 delete
.
此外,您的内部循环正在检查 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>