选择排序算法

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。下面先看代码,待会对照代码解释:

#include "stdio.h"

int main()
{
    int a[5] = { 4,3,5,1,2 };
    int i, j, k, temp;
    for (i = 0; i < 5; i++) { //外循环
        k = i;
        for (j = i + 1; j < 5; j++) //内循环
        {
            if (a[k] > a[j]) {
                k = j;
            }
        }
        if (k != i) {   //交换
            temp = a[i];
            a[i] = a[k];
            a[k] = temp;
        }
    }
    //输出
    for (int i = 0; i < 5; i++)
    {
        printf("%d\n", a[i]);
    }
    getchar(); //暂停
    return 0;
}

如上数组a[5]={ 4,3,5,1,2 },要对该数组进行升序排列。那么在第一轮外循环后我们要找出数组中最小的那个数“1”并把它放到第一位,那如何找出它呢,那就要通过内循环,内循环的功能是用a[k]标记出数列中最小的那个数。外循环开始时先把第一位标识为a[k](即k=i),然后进入内循环,内循环中用第一个元素a[k],逐个与a[j]对比,如果a[k]>a[j],则用a[k]标记a[j],再继续和剩下的对比。整个内循环完成后,a[k]就是最小的那个数,虽然我们不清楚它是第几个,但我们知道用a[k]标记了最小的那个,然后把a[k]和第一个数对换位置,交换前判断第一个数是不是最小的(k!=i),如果是就不用交换,不是就进行交换。外循环第一轮结束后最小的已经排在第一位了,下一轮外循环从下一个元素(j=i+1)进行对比,同理找出第二小的数排在第二个,以此类推。

点赞