用选择排序法对一组数据由小到大进行排序,数据分别为 526、36、2、369、56、45、78、92、125、52。

算法表述:

选择排序的基本原理是以序列首元素位置为基准位置,每次将该基准位置的元素和后面元素逐个进行比较,挑选最大或者最小的那个数放在基准位置上,一趟比较结束后,然后将基准位置设置为该位置的下一位置,重复上述操作,直到基准被安排在序列的最后有一个位置时,此时序列已经排列完成。

算法执行过程分析:

例如:88、5、15、56、32、18、69
说明:按照从小到大的顺序进行排序,其中每条彩色线条为两数之间的比较,其条数为比较次数.图示为比较结果,过程较为简单,请读者自行分析.
(1)第一躺比较:

此时最小数5已经放在最开始的位置。
(2)第二趟比较:

此时将第二小的数字放在当前序列的开头
(3)第三趟排序:

此时将第三小的数字放在当前序列的开头
以此类推,可得到最终结果为:5、15、18、32、56、69、88


实现过程:
(1) 程序中用到T两个 for 循环语句。第一个 for 循环是确定位置的,该位置是存放每次从待排序数列中经选择和交换后所选出的最小数。第二个 for 循环是实现将确定位置上的数与后面待排序区间中的数进行比较的。

(2) 程序代码如下:

#include <stdio.h>

void Selset_Sort(int s[], int n) {
    int i, j, temp;
    for (i = 0; i < n; ++i) {
        for (j = i + 1; j < n; ++j) {
            if (s[i] > s[j]) {  //如果前一个数比后一个数大,则利用中间变量t实现两值互换
                temp = s[i];
                s[i] = s[j];
                s[j] = temp;
            }
        }
    }
}

int main(void) {
    int b[10], j;
    printf("请输入10个数:\n");
    for (j = 0; j < 10; j++)
        scanf("%d", &b[j]);
    Selset_Sort(b, 10);         //调用快速排序函数
    printf("排序后的顺序是:\n");
    for (j = 0; j < 10; j++)
        printf("%-4d", b[j]);
    printf("\n");

    return 0;
}

输出结果:

请输入10个数:
526 36 2 369 56 45 78 92 125 52
排序后的顺序是:
2   36  45  52  56  78  92  125 369 526

技术要点:

选择排序的基本算法是从待排序的区间中经过选择和交换后选出最小的数值存放到 a[0] 中,再从剩余的未排序区间中经过选择和交换后选出最小的数值存放到 a[1] 中,a[1] 中的数字仅大于 a[0],依此类推,即可实现排序。