交换法排序,读者只要仔细研究一下这个算法就不难发现,其排序效率较低。因为在第i轮(i=0,1,2……,n-2)比较中,第i+1个数和后面所有的数都要进行一次比较,每进行一次比较,若后面的数大就交换位置,这样每轮比较中最多需要n-1次交换操作,从而导致需要交换的次数太多。
事实上,完全可以在找出余下的数中的最大值再与第i+1个数交换位置,这样每轮比较中最多只有一次交换操作,整个算法最多有n-1次交换操作。虽然比较操作未能减少,但交换操作可以从总体上减少,这种改进的算法称为选择法排序。
按选择法进行排序的过程如图所示:
设计一个函数对实型数组score中的n个学生成绩降序排序:
#include
#defineARR 100
void sort(float score[],long num[],int n);
int main()
{
float score[ARR];
long num[ARR];
int n,i;
printf("Pleaceentertotal number:");
scanf("%d