一开始写的代码(错误)是这样子的
#include<stdio.h>
int main()
{
int n,i,j,temp;
int a[20]={0};
printf("请输入排序的数量:\n");
scanf("%d",&n);
printf("请输入要排序的数:\n");
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=1;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(i=0;i<n;i++)
{
printf("%d\t",a[i]);
}
return 0;
}
运行结果如下:
可见 以上代码只对前三个数进行了排列,错误出现在
应该改为 i = 0,下面有详细讲述~~~
修改代码如下
#include<stdio.h>
int main()
{
int n,i,j,temp;
int a[20]={0};
printf("请输入排序的数量:\n");
scanf("%d",&n);
printf("请输入要排序的数:\n");
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(i=0;i<n;i++)
{
printf("%d\t",a[i]);
}
return 0;
}
此时运行成功
小女子对冒泡的理解
就拿上面这六个数(12 6 23 4 89 1)来说,我们这里是从小到大的排序方法
如果想改成 从大到小 的顺序,代码只需改动如下部分:
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(a[j]<a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
如有错误,欢迎各位大佬批评指正~~~