上一篇文章中讲C语言排序中的比较常见的(交换)冒泡排序,那么这篇文章也将以新手个人的经历来讲同样比较常见而实用的数组排序之选择排序。
选择排序,从字面上看是通过选择来进行排序。其实它的用法就是通过选择来进行排序的,我就以从小到大为例。设定一个临时的变量用来储存当前的最小值,如对第一位上该放置最小的数值,那么我要将第一位上的数值与后面位上的数进行值的比较,如果有比较的值比该数值小时则通过temp这个临时变量进行两值的交换,然后继续将交换后的值与剩下的数进行比较,如还有更小的值则继续交换值,否则不交换。这样依次比较到最后一位时就把第一位上该放置的数值找出来了,后面第二位、第四位......同理的操作。
我还是以 4 6 32 5 12 2 15 28 9 10 这10个数为例进行选择排序,过程如下图
(方框中的数值则表示当前要排序位置上的数值)
代码如下:
#include"stdio.h" //传统交换法 int main(void) { int i, j; int temp, min; int a[10] = {4, 6, 32, 5, 12, 2, 15, 28, 9, 10}; for(j = 0; j < 10; j ++){ for(i = j + 1; i < 10; i ++){//从要进行排序位上的数值开始 与后面的数值依次进行比较 //如有比其值小的则进行值的交换 然后继续比较下去 若还有值比其小的继续进行值的交换 //否则不进行 if(a[j] > a[i]){ temp = a[i]; a[i] = a[j];//通过临时变量进行值的交换操作 a[j] = temp; } } } for(i = 0; i < 10; i ++)//打印输出 printf("%d ", a[i]); }