关于C语言冒泡排序

来源:百度知道 编辑:UC知道 时间:2024/07/01 05:08:51
下面是我冒泡排序的代码~但是我输出的时候总显示为{2,5,1,4,3,0,6,13,7,12,8,11,10,9} 我想请问下是哪里错了

#include<stdio.h>
void main()
{
int num[]={2,5,1,4,3,0,6,13,7,12,8,11,10,9};
int count=sizeof(num)/sizeof(num[0]);
int tmp;
bool swapped;
for(int i=0;i<count;i++)
{
swapped=false;
for(int j=0;j<count-i-1;j++)
{
if(num[j+i]<num[j])
{
tmp=num[j+1];
num[j+1]=num[j];
num[j]=tmp;
swapped=true;
}
}

if(!swapped)

break;
}
for(i=0;i<count;i++)
{
printf("%d",num[i]);
}

}
swapped=0和swapped=1定义的是什么?

if(num[j+i]<num[j])

改为

if(num[j+1]<num[j])

即可。

完整的修改后程序如下:

//---------------------------------------------------------------------------

#include<stdio.h>
void main()
{
int num[]={2,5,1,4,3,0,6,13,7,12,8,11,10,9};
int count=sizeof(num)/sizeof(num[0]);
int tmp,i,j; /*建议将i和j的定义放在这里,ANSI C不允许你那样定义变量*/
int swapped; /*建议用int,在ANSI C中没有bool类型*/
for(i=0;i<count;i++)
{
swapped=0; /*建议*/
for(j=0;j<count-i-1;j++)
{
if(num[j+1]<num[j]) /**** 注意这里!应该是num[j+1]而非num[j+i] ****/
{
tmp=num[j+1];
num[j+1]=num[j];
num[j]=tmp;
swapped=1; /*建议*/
}
}

if(!swapped)

break;
}
for(i=0;i<count;i++)
{
printf("%d ",num[i]);
}

}
//---------------------------------------------------------------------------

**************