C++冒泡排序
编写一个函数voidBubbleSort(intA[],ints,intm),能够从数组A第s个(以0为开始)元素起始,连续m个元素使用冒泡法降序排序。数组A最多有N(1...
编写一个函数void BubbleSort(int A[],int s,int m),能够从数组A第s个(以0为开始)元素起始,连续m个元素使用冒泡法降序排序。数组A最多有N(1≤N≤100)个元素,0≤s<N,且s+m≤N。在主函数输入输出,调用函数BubbleSort求解。
第1行输入整型n,第2行给A输入n个整型数据,第3行输入s和m,数据之间用空格隔开。
我只想知道我的哪里错了。
#include<iostream>
using namespace std;
void BubbleSort(int a[],int s,int m,int n)
{
int i,j;
int t;
int q;
for(i=s;i<s+m-1;i++)
{
for(j=s;j<m+s-i-1;j++)
{
if(a[j]<a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
cout<<a[0];
for(q=1;q<n;q++)
cout<<" "<<a[q];
}
int main()
{
int a[101];
int n,s,m;
int i;
cin>>n;
for(i=0;i<n;i++)
cin>>a[i];
cin>>s>>m;
BubbleSort(a,s,m,n);
return 0;
}
求改错 展开
第1行输入整型n,第2行给A输入n个整型数据,第3行输入s和m,数据之间用空格隔开。
我只想知道我的哪里错了。
#include<iostream>
using namespace std;
void BubbleSort(int a[],int s,int m,int n)
{
int i,j;
int t;
int q;
for(i=s;i<s+m-1;i++)
{
for(j=s;j<m+s-i-1;j++)
{
if(a[j]<a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
cout<<a[0];
for(q=1;q<n;q++)
cout<<" "<<a[q];
}
int main()
{
int a[101];
int n,s,m;
int i;
cin>>n;
for(i=0;i<n;i++)
cin>>a[i];
cin>>s>>m;
BubbleSort(a,s,m,n);
return 0;
}
求改错 展开
1个回答
展开全部
相当于对数组B[s到s+m-1大小]进行冒泡排序,其他的元素不变。看样子你也是会冒泡排序的,既然简化成这样的数组应该没问题了把。直接往冒泡排序的模板里面套就行了。所以你的这个for(i=s;i<s+m-1;i++)就出问题了。第二个值是数组长度-1,这个数组长度怎么会是s+m-1。我不确定你这个连续包不包括第一个数字,如果包括数组长度就是m,不包括就是m+1。剩下的自己套吧。
更多追问追答
追问
请问要怎么改啊
追答
把你的循环体改成这样试试,我这没有vc,没法测试
for (int i = m; i > s; --i)
{
for (int j = s; j < i; ++j)
{
if (a[j + 1] < a[j])
{
t= a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询