用一个函数实现用选择法对5个整数按升序排序
选择法思想:
先选出5个数中最小的数,把它和score[0]交换,这样a[0]就是5个数中最小的数了;再在剩下4个数(score[1]到score[4])中选出最小的数,把它和score[1]交换,这样ascore1]就是剩下4个数中最小的数了,也就是5个数中第2小的数了,……,如此一轮一轮进行下去,每比较一轮,找出一个未经排序的数中最小的一个并进行交换。共经过4轮的比较和交换,就顺序找出了前4个小的数了,显然最后一个数(score[4])就是最大的数了。
下图表示用选择法对5个数排序的步骤:
score[0] score[1] score[2] score[3] score[4]
4 8 2 6 9 (未排序的情况)
2 8 4 6 9 (第一轮)
2 4 8 6 9 (第二轮)
2 4 6 8 9 (第三轮)
2 4 6 8 9 (第四轮)
#include<stdio.h>
void input(int array[],int n); //对输入函数的声明
void sort(int array[],int n); //对sort函数的声明
void output(int array[],int n); //对输出函数的声明
int main()
{
int score[5];
input(score,5);
sort(score,5); //调用sort函数
output(score,5);
return 0;
}
void input(int array[],int n)
{
int i;
printf("请输入一串数字(5个):\n");
for(i=0;i<n;i++)
{
scanf("%d",&array[i]);
}
}
void sort(int array[],int n) //选择法排序函数
{
printf("选择法对5个整数升序排序\n");
int i,j,k,tmp;
for(i=0;i<n-1;i++)
{
k=i; //k用来存放当前"最小"的元素的符号
for(j=i+1;j<n;j++) //将第i个元素与其后元素比较
{
if(array[k]>array[j]) //如果第j个元素比第k个元素小
k=j; //把当前最小元素的符号j保存在k中
}
tmp=array[k];
array[k]=array[i];
array[i]=tmp;
}
}
void output(int array[],int n)
{
int i;
printf("排序后输出的结果是:\n");
for(i=0;i<n;i++)
{
printf("%d",array[i]);
printf(" ");
}
printf("\n");
}
运行结果: