c++冒泡法小问题,请帮帮忙

来源:百度知道 编辑:UC知道 时间:2024/06/30 00:49:16
// test031.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "DDD.h"
#include <iostream>
using namespace std;

int main(int argc, char* argv[])
{
int a[10];
for(int i=0;i<10;i++)
cin>>a[i];
int t;
for(i=0;i<9;i++)
for(int j=0;j<=9-i;j++)
{
if(a[j]>a[j+1]) //为什么这里用if(a[j]<a[j+1])就不对呢?
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
for(i=0;i<10;i++)
cout<<a[i]<<" ";
printf("Hello World!\n");
return 0;
}

问题如注释所示
运行结果第二个数出错,溢出

j<=9-i;
应该改为: j<9-i;

因为当i=0; 对于j<=9-i; j的值为9, 此时a[j+1]的下标值为10越界(数组的最大下标为9)

1.排序
if(a[j]>a[j+1]) ---交换(从小到大)
if(a[j]<a[j+1]) ---交换(从大到小)

2.10个数,共比较9趟,

第一趟:比较9次
第二趟:比较8次
。。。
第九趟:比较一次

for(i=0;i<9;i++) //i从0到8(有9趟)
for(int j=0;j<9-i;j++) //j:当i=0时,比较9次,j从0到8

for(int j=0;j<9-i;j++) //这里改下就可以
改成小于号是降序排列

for(int j=0;j<=9-i;j++) 错了,如果是这样的话,数组a就会越界,应该是
for(int j=0;j<=8-i;j++)