冒泡排序遇到的一些问题

为什么我的输出结果一直有问题,这个随机值是怎么来的?
如图输数结果一直有这个东西,我单步调试的时候发现是从i那边出现的,但是我已经给i赋过初始值了呀,求解大神指点一二
#include
using namespace std;
void BubbleSort(int arr,int len)
{
int i, j,temp;
int flag = 0;//
for (i = 0; i <= len-1; i++)
for (j = 0; j <= len -1- i; j++)
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = 1;
}
//判断标志位是否为0,如果为0,说明后面的元素已经有序,就直接return
if (flag == 0)
{
return;
}
}
int main()
{
int i = 0;
/*int n=7;
int arr[7];
cout << "Input number:";
for (int i = 0; i < n; i++)
{
cin >> arr[i];
}
cout << endl;
/
int arr[7] = { 1,23,5,8,12,4,3 };
cout << "初始序列为:";
for (i = 0; i < 7; i++) {
cout << arr[i] << " ";
}
cout << endl;
BubbleSort(arr, 7);
cout << "冒泡排序后的顺序为:";
for (int i = 0; i<7; i++) {
cout << arr[i] <<" ";
}
cout << endl;
system("pause");
return 0;
}

8个回答

for (j = 0; j <= len -1- i; j++) 这个for循环不对,arr[j + 1]超限了

u013100788
小生自然卷 嗯嗯,是这样的,改过就没问题了
2 年多之前 回复

如果可以,下次写代码用那个代码格式写,这样看起来不舒服。
下面有个链接,里面有5种排序的实现。
5种排序方法
我再看看你代码,看完给回复

u013100788
小生自然卷 多谢啦
2 年多之前 回复

那个函数就是有很大问题,你用的arr不是个数组,就是一个数而已。

u013100788
小生自然卷 回复肥宅_Sean: 是的,手误没写上
2 年多之前 回复
a19990412
肥宅_Sean 回复小生自然卷: 漏了[]这个东西,或者是*这样的东西,所以函数参数那不是数组,而是一个int整数型。这样导致了你后续没办法操作
2 年多之前 回复
u013100788
小生自然卷 是数组呀
2 年多之前 回复

发现几个错误,首先是void BubbleSort(int arr[],int len),然后这个函数里面的两个for循环中要把=号去掉。不多说,上代码
#include
using namespace std;
void BubbleSort(int arr[],int len)
{
int i, j,temp;
int flag = 0;
for (i=0;i for (j=0;j if (arr[j]>arr[j+1])
{
temp=arr[j];
arr[j]=arr[j + 1];
arr[j+1]=temp;
flag = 1;
}
//判断标志位是否为0,如果为0,说明后面的元素已经有序,就直接return
if (flag == 0)
{
return;
}
}
int main()
{
int i = 0;
int arr[7]={1,2,5,8,9,4,3};
cout << "初始序列为:";
for (i=0;i<7;i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
BubbleSort(arr, 7);
cout<<"冒泡排序后的顺序为";
for (i=0;i<7;i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
system("pause");
return 0;
}

发现粘贴好像少了一些。。补上,然后把那个判断有序的改了一下,flag定义成全局变量了。
#include
using namespace std;
int flag=0;
void BubbleSort(int arr[],int len)
{
int i,j,temp;
for (i=0;i for (j=0;j if (arr[j]>arr[j+1])
{
temp=arr[j];
arr[j]=arr[j + 1];
arr[j+1]=temp;
flag = 1;
}
//判断标志位是否为0,如果为0,说明后面的元素已经有序
}
int main()
{
int i = 0;
int arr[7]={1,2,3,4,5,6,7};
cout << "初始序列为:";
for (i=0;i<7;i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
BubbleSort(arr, 7);
if (flag==0)
{
printf("已有序\n");
}
else
{
cout<<"冒泡排序后的顺序为";
for (i=0;i<7;i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
}
system("pause");
return 0;
}

FH_ZQ
FH_ZQ 第一个函数里的两个for循环老粘贴不出来。。。。。。反正去掉里面的等号就对了
2 年多之前 回复

形参有问题,应该为int型数组,把整个数组传过去

u013100788
小生自然卷 void BubbleSort(int *arr,int len),之前是这样写的,应该是复制粘贴时候丢了,是个越界的问题
2 年多之前 回复

是这样的,越界了
#include
using namespace std;
void BubbleSort(int arr,int len)
{
int i, j,temp;
int flag = 0;
for (i = 0; i <= len-1; i++)
for (j = 0; j < len -1-i ; j++)
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = 1;
}
//判断标志位是否为0,如果为0,说明后面的元素已经有序,就直接return
if (flag == 0)
{
return;
}
}
int main()
{
/*int n=7;
int arr[7];
cout << "Input number:";
for (int i = 0; i < n; i++)
{
cin >> arr[i];
}
cout << endl;
/
int arr[7] = { 1,23,5,8,12,4,3 };
cout << "初始序列为:";
for (int i = 0; i < 7; i++) {
cout << arr[i] << " ";
}
cout << endl;
BubbleSort(arr, 7);
cout << "冒泡排序后的顺序为:";
for (int i = 0; i<7; i++) {
cout << arr[i] <<" ";
}
cout << endl;
system("pause");
return 0;
}

当时的结果一直是这样的

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问