美文网首页C语言
选择法排序

选择法排序

作者: sure_风雨与晴 | 来源:发表于2019-02-28 17:19 被阅读0次

    可以在找出余下的所有数中的最大值后再与第i+1个数交换位置,这样每一轮比较中最多只有一次两数交换操作,整个算法最多有n-1次两数交换操作。

    #include <stdio.h>
    #include <stdlib.h>
    #define N 40
    
    int ReadScore(int score[]);
    void DataSort(int score[], int n);
    void PrintScore(int score[], int n);
    int main()
    {
        int score[N], n;
        n = ReadScore(score);       //调用函数ReadScore()输入成绩,返回学生人数
        printf("Total students are %d\n", n);
        DataSort(score, n);         //调用函数进行成绩排序
        printf("Sorted scores:");
        PrintScore(score, n);       //调用函数进行输出成绩排序结果
        return 0;
    }
    
    //输入学生某门课的成绩,当输入为负值时结束输入
    int ReadScore(int score[])
    {
        int i = -1;     //i初始化为-1,可以保证循环体内i增1后数组下标从0开始
        do{
            i++;
            printf("Input score:");
            scanf("%d", &score[i]);
        }while (score[i] >= 0);
        return i;
    }
    
    //选择法将数组score的元素按值从高到低排序
    void DataSort(int score[], int n)
    {
        int i, j, k, temp;
        for (i = 0; i < n-1; i++)       //因为数组最后一个即第n-1个不需要比较
        {
            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;
            }
        }
    }
    
    //打印学生成绩
    void PrintScore(int score[], int n)
    {
        int i;
        for (i = 0; i < n; i++)
            printf("%4d", score[i]);
        printf("\n");
    }
    
    

    相关文章

      网友评论

        本文标题:选择法排序

        本文链接:https://www.haomeiwen.com/subject/aurkuqtx.html