例60:C语言实现用选择法对10个整数排序。
解析:选择排序思路如下,设有10个元素a[1]~a[10],将a[1]与a[2]~a[10],若a[1]比a[2]~a[10]都小,则不进行交换,即无任何操作。
若a[2]~a[10]中有一个以上比a[1]小,则将其中最大的一个,与a[1]交换,此时a[1]中存放了10个中最小的数。依次类推,共进行9轮比较,a[1]~a[10]就已按由小到大的顺序存放了。
整体代码逻辑为了让读者更加清晰,小林这里分为四部分:
第一部分 键盘输入10个数:
for(i=1;i<=10;i++)//依次键盘录入10个数据
{ printf("array[%d]=",i-1);//数组下标从0开始
scanf("%d",&array[i]);
}
第二部分 输出键盘录入的10个数:
for(i=1;i<=10;i++)//将键盘录入的10个数原样输出
{ printf("%5d",array[i]);
}
第三部分 排序逻辑:
for(i=1;i<=9;i++)
{ min=i;//把第一个数作为最小的
for(j=i+1;j<=10;j++) { if(array[min]>array[j])//判断大小,小的为min
{ min=j; } } temp=array[i]; //大小交换
array[i]=array[min]; array[min]=temp; }
第四部分 排序后的10个数:
for(i=1;i<=10;i++)//输出排序后的10个数
{ printf("%5d",array[i]);
}
源代码演示:
#include<stdio.h>//头文件
int main()//主函数
{
int i,j,min,temp,array[11];//定义整型变量和数组
printf("输入数据:\n");//提示语句
for(i=1;i<=10;i++)//依次键盘录入10个数据
{ printf("array[%d]=",i-1);//数组下标从0开始
scanf("%d",&array[i]);
}
printf("\n");//换行
printf("原样输出:\n");//提示语句
for(i=1;i<=10;i++)//将键盘录入的10个数原样输出
{ printf("%5d",array[i]);
}
printf("\n");//换行
for(i=1;i<=9;i++)
{ min=i;//把第一个数作为最小的
for(j=i+1;j<=10;j++) { if(array[min]>array[j])//判断大小,小的为min
{ min=j; } } temp=array[i]; //大小交换
array[i]=array[min]; array[min]=temp; } printf("排序输出:\n");//提示语句
for(i=1;i<=10;i++)//输出排序后的10个数
{ printf("%5d",array[i]);
}
printf("\n");//换行
return 0;//主函数返回值为0
}
编译运行结果如下:
输入数据:
array[0]=1
array[1]=4
array[2]=7
array[3]=9
array[4]=4
array[5]=3
array[6]=7
array[7]=9
array[8]=5
array[9]=3
原样输出: 1 4 7 9 4 3 7 9 5 3
排序输出: 1 3 3 4 4 5 7 7 9 9
--------------------------------
Process exited after 8.036 seconds with return value 0
请按任意键继续. . .
想看快速排序,归并排序各种排序的点赞告诉我啦
C语言 | 选择法排序文章来源: zhuanlan.zhihu.com,作者:小林C语言,版权归原作者所有,如需转载,请联系作者。
原文链接:zhuanlan.zhihu.com/p/343877545