冒泡排序遇到的一些问题

为什么我的输出结果一直有问题,这个随机值是怎么来的?
如图输数结果一直有这个东西,我单步调试的时候发现是从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;
}

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

当时的结果一直是这样的

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

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

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

是这样的,越界了
#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;
}

发现几个错误,首先是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;
}