数组排序(交换法与选择法)

交换法与选择法降序排序

交换法

交换法对数组数组进行排序的基本思路 就是先让数组(n个数)中的最左边的一个数(用i=0代表)与其右边的每一个数(从j=i+1开始)依次(j++)进行比较,若遇到比其大的数(score[j]>score[i]),则将较大的那个数的值赋给自己,自己成为较大数继续与后面的数比较,以此类推,一轮后(即j=n时),让i自增1,重复上述循环直至i=n-1.

下面以一个有5个数的数组演示交换法排序:

#include <stdio.h>
void main()
{
    int i,j,temp;
    int score[5]={10,20,30,40,50};
    int n=5;
    for (i=0;i<=n-1;i++)
    {
        for (j=i+1;j<=n;j++)
        {
            if(score[j]>score[i])
            {
                temp=score[j];
                score[j]=score[i];
                score[i]=temp;
            }
        }        

    }
    for(i=0;i<=n-1;i++)
    {
        printf("score[%d]= %d\n",i,score[i]);
    }
}

选择法

选择法基本思路与交换法大致相似,不同点是交换法在一轮中要比较交换多次,而选择法是一轮中比较多次,而最多交换一次。选择法也是从i=0开始比较,遇到较大的数(score[j]>score[k](k在一开始是等于i的))则交换下标,最后若k 不等于i,则score[k]与score[i]交换位置。

同样以上述的数组用选择法来排序:

#include <stdio.h>
void main()
{
    int i,j,temp,k;
    int score[5]={10,20,30,40,50};
    int n=5;
    for (i=0;i<=n-1;i++)
    {
        k=i;
        for (j=i+1;j<=n;j++)
        {
            if (score[j]>score[k])
            {
                k=j;
            }
        }
        if (k!=i)
        {
            temp=score[k];
            score[k]=score[i];
            score[i]=temp;
        }
    }
    for(i=0;i<=n-1;i++)
    {
        printf("score[%d]= %d\n",i,score[i]);
    }
}

总结

选择法建立在交换法之上,但因交换次数较少,故效率较高

猜你喜欢

转载自blog.csdn.net/flwbf/article/details/78311282
今日推荐