读书人

新手冒泡法

发布时间: 2012-04-15 18:39:21 作者: rapoo

新手求教:冒泡法

C/C++ code
#include <stdio.h>#define N 10int main(int argc, char *argv[]){    static int a[N] = {        2,4,51,3,6,7,9,12,34,0    };    int i,j;    void swap(int,int);    /*for(i = 0;i < N;i++)    {        printf("a[%d]=",i);        scanf("%d",&a[i]);    }*/    for(j = 0;j < N;j++)//不运行 ?    {        for(i = 0;i < N-j-1;i++)        {            if(a[i] > a[i+1])                swap(a[i],a[i+1]);        }    }        for(i = 0;i < N;i++)    {        printf("a[%d]=%d;",i,a[i]);    }    return 0;}void swap(int b,int c){    int tmp = 0;    tmp = b;    b = c;    c = tmp;    }


[解决办法]
for(i = 0;i < N-j-1;i++)
{
if(a[i] > a[i+1])
swap(a[i],a[i+1]);
}
这里有问题

我想应该是 for( i = j+1; i < N; i++)

for(j = 0;j < N;j++)//不运行 ?

N 改成 N - 1.

再试试,看行不行?
[解决办法]
并不是不运行,是你的swap没有起到作用。传值和传址的区别。
[解决办法]
//已经帮你修改,完全可以运行,结果正确

#include <stdio.h>
#define N 10
int main(int argc, char *argv[])
{
static int a[N] = {
2,4,51,3,6,7,9,12,34,0
};
int i,j;
void swap(int*,int*);
/*for(i = 0;i < N;i++)
{
printf("a[%d]=",i);
scanf("%d",&a[i]);
}*/
for(j = 0;j < N;j++)//不运行 ?
{
for(i = 0;i < N-j-1;i++)
{
if(a[i] > a[i+1])
swap(&a[i],&a[i+1]);
}
}

for(i = 0;i < N;i++)
{
printf("a[%d]=%d;",i,a[i]);
}
return 0;
}
void swap(int *b,int *c)
{
int tmp = 0;
tmp = *b;
*b = *c;
*c = tmp;
}

读书人网 >C++

热点推荐