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