新手冒泡法
新手求教:冒泡法C/C++ code#include stdio.h#define N 10int main(int argc, char *argv[]){static int
新手求教:冒泡法
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;
}