#include"stdio.h"
#include"stdlib.h"
void main()
{
int i;
int j;
int a=0;
int b[12]={-1,0,5,2,7,0,18,5,4,3,9,1};
int change=1;
for (i=0;i {
change=0;
for(j=0;j if(b[j]>b[j+1])
{
b[j]=a;
b[j]=b[j+1];
b[j+1]=a;
}
}
for(j=0;j<=11;j++)
printf("%d\n",b[j]);
printf("\n");
}
如上。。
#include"stdio.h"
#include "stdlib.h"
int main()
{
int i;
int j;
int a=0;
int b[12]={-1,0,5,2,7,0,18,5,4,3,9,1};
for (i=0;i<12-1;i++)
{
for(j=0;j<12-1;j++)
{
if(b[j]>b[j+1])
{
a=b[j];
b[j]=b[j+1];
b[j+1]=a;
}
}
}
for(j=0;j<=11;j++)
printf("%d\n",b[j]);
printf("\n");
}
-1
0
0
1
2
3
4
5
5
7
9
18
a=b[j]; //修改
b[j]=b[j+1];
b[j+1]=a;
程序 复制粘贴出错了
第二个for循环不对,第二个for循环j不需要受i的影响,同样要执行数组长度-1的次数
#include"stdio.h"
#include "stdlib.h"
int main()
{
int i;
int j;
int a=0;
int b[12]={-1,0,5,2,7,0,18,5,4,3,9,1};
int change=1;
for (i=0;i<12&&change;i++)
{
change=0;
for(j=i;j<12-1;j++)
{
if(b[j]>b[j+1])
{
a=b[j];
b[j]=b[j+1];
b[j+1]=a;
change=1;
}
}
}
for(j=0;j<=11;j++)
printf("%d\n",b[j]);
printf("\n");
}
肯定可以了
http://ideone.com/Pj2VN9
-1
0
0
2
3
1
4
5
5
7
9
18
多想一想冒泡排序的过程
每次都要将所有的值挨个判断一遍
这样循环长度-1次,才能将所有的排好
因为你每次都只能将两个相邻的值交换位置