C语言排序法(选择排序法/冒泡排序法)
选择排序法
#include
void main()
{
int i,j,k,temp,a[10];
for(i=0;i<10;i++)
scanf(“%d”,&a[i]);
for (i=0;i<10;i++)
{
k=i; //保存i的值,用k来进行循环排序
for(j=i+1;j<10;j++) //将第i个元素后面的元素与第i个元素进行比较
if(a[k]<a[j])//如果第k=i个元素后面的元素小于i号元素,交换两个元素的标号, 这样就将最小元素的标号放到最前面
k=j; //记录最大的位置
temp=a[k];//内循环结束后,交换两个标号下的元素的值
a[k]=a[i];
a[i]=temp;
}
for(i=0;i<10;i++)
printf(“%d”,a[i]);
}
选择排序法的优点是速度快,比较出最大(最小)的数字后才交换顺序。若内循环做完并未发现最大(最小)数,则自身交换,故交换次数为外循环循环次数。
冒泡排序法
#include
void main()
{
inti,j,k,temp,a[10];
for(i=0;i<10;i++)
scanf(“%d”,&a[i]);
for(i=0;i<10;i++)
{
for(j=i+1;j<10;j++)
{
if(a[i]<a[j])
{
temp=a[i]; //如果后面的数大于前面的数,交换数据。 内循环完成后a[0]存的数字是最大的。
a[i]=a[j];
a[j]=temp;
}
}
}
for(i=0;i<10;i++)
printf(“%d”,a[i]);
}
冒泡排序法优点是程序简单,但是较繁琐,运行较慢,因为每次比较完最小(最大),内循环就要完成一次交换。
综上所述,建议使用选择排序法。另外两种排序法for语句条件都是一样的。选择排序法外循环交换,内循环记录最小(最大)位置。冒泡排序法则在内循环完成交换。
还没有评论,来说两句吧...