关于冒泡排序

来源:百度知道 编辑:UC知道 时间:2024/05/10 17:55:18
这是我看的例题,理解了半天算明白了点
main()
{
int i,j,p,q,s,a[5];
printf("\n input 10 numbers:\n");
for(i=0;i<5;i++)
scanf("%d",&a[i]);
for(i=0;i<5;i++)
{
p=i;q=a[i];
for(j=i+1;j<5;j++)
if(q>a[j]) { p=j;q=a[j]; }
if(i!=p)
{s=a[i];
a[i]=a[p];
a[p]=s; }
printf("%d",a[i]);
}
}
可是根据我的理解好像有几个多余的,我精简成这个样子,执行了没错误
#include"stdio.h"
main()
{
int i,j,s,a[5];
printf("\n input 5 numbers:\n");
for(i=0;i<5;i++)
scanf("%d",&a[i]);
for(i=0;i<5;i++)
{

for(j=i+1;j<5;j++)
if(a[i]>a[j]) {s=a[i];a[i]=a[j];a[j]=s;}
printf("%d ",a[i]);
}
printf("\n");
}
请问我删去的那些有什么用? 运行会出现什么问题?
我是新手最近才学的C语言,麻烦指教下,谢谢了
主要是 if(i!=

冒泡法:
有n个数,进行n便过滤 第i遍时从第1个数起到第n-i个数止
依次比较x 和 x+1两个数 如果数(x)〉(x+1)就交换他们
形象一些就好象是将较大的数向下沉,每一遍都会把这一遍能遇到的
最大数压倒底,这样n便之后,就形成了小到大的有序数列

上面的是选择 一直到找到最大值……

拜托 上面叫选择法
下面叫冒泡法