读书人

小弟我写的一个冒泡算法各位客观请看

发布时间: 2012-04-01 17:23:46 作者: rapoo

我写的一个冒泡算法,各位客观请看看,问题出在哪儿了?
[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
·交换两个元素是否正确实现

读书人网 >C语言

热点推荐