首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

小弟我写的一个冒泡算法,各位客观请看看,有关问题出在哪儿了

2012-04-01 
我写的一个冒泡算法,各位客观请看看,问题出在哪儿了?[codeC/C++][/code]#includestdio.h#define N 10vo

我写的一个冒泡算法,各位客观请看看,问题出在哪儿了?
[code=C/C++][/code]
#include<stdio.h>
#define N 10

void maopao(int a[])
{
  int i,j,temp;
  for(j=0;j<N;j++)
for(i=j+1;i<(N-j);i++)
if(a[i]>a[i+1])
{
temp =a[i];
a[i] =a[i+1];
a[i+1] =temp;
}
}
void main()
{
  int a[N],i;
  printf("Input array is :\n");
  for(i=0;i<N;i++)
  scanf("%d",a[i]);
  printf("The oringnal arrray is :\n");
  printf("\n");
  for(i=0;i<N;i++)
  printf("%3d",a[i]);
  printf("\n");
  maopao(a);
  printf("new array is :\n");
  for(i=0;i<N;i++)
  {
printf("%3d",a[i]);
  }
  printf("\n");
}

[解决办法]
 for(int j=N-1;j>0;j--)   
{   
int temp;   
for(int i=0;i<j;i++)   
{   
if(a[i]>a[i+1])   
{   
temp=a[i];   
a[i]=a[i+1];   
a[i+1]=temp;   
}   

}
[解决办法]
[code=C/C++]
for(int i=0;i <10;i++){
for(int j=0;j <10;j++){
..........
}
}
[/code]
[解决办法]
上面的写错了!!!

C/C++ code
for(int   i=0;i <10;i++){      for(int j=i;j <10;j++){          ..........      }}
[解决办法]
C/C++ code
    for(j=0;j<N-1;j++)        for(i=0;i<(N-1-j);i++)            if(a[i]>a[i+1])            {                temp =a[i];                a[i] =a[i+1];                a[i+1] =temp;            }
[解决办法]
C/C++ code
    for(j=0;j<N-1;j++)        for(i=0;i<(N-1-j);i++)            if(a[i]>a[i+1])            {                temp =a[i];                a[i] =a[i+1];                a[i+1] =temp;            }
[解决办法]
C/C++ code
    for(j=0;j<N-1;j++)        for(i=0;i<(N-1-j);i++)            if(a[i]>a[i+1])            {                temp =a[i];                a[i] =a[i+1];                a[i+1] =temp;            }
[解决办法]
C/C++ code
void maopao(int* a){  int i,j,temp;  for(j = 0; j < (N -1); j++)//每循环一次把序列中的最大值放序列的后面所以里面的for循环 i从0开始  {    for(i = 0; i < (N - j); i++)    {      if(a[i] > a[i+1])      {         temp   = a[i];         a[i]   = a[i+1];         a[i+1] = temp;      }    }   }}
[解决办法]
a[i]>a[i+1]因为你这儿有a[i+1],防止越界,当j=0的时候,i要小于N-1,这样才不会越界。。。同理j<N-1也一样
[解决办法]
C/C++ code
void maopao(int* a){  int i,j,temp;  for(j = 0; j < (N -1); j++)//每循环一次把序列中的最大值放序列的后面所以里面的for循环 i从0开始  {    for(i = 0; i < (N - j - 1); i++)//这里忘了减一了....    {      if(a[i] > a[i+1])      {         temp   = a[i];         a[i]   = a[i+1];         a[i+1] = temp;      }    }   }}
[解决办法]
冒泡排序关注以下几个因素:


·分清要从大到小还是从小到大排序
·是否做了某个或某些元素自己和自己比较的无用功
·数组下标范围是0~N-1还是1~N
·交换两个元素是否正确实现

热点排行