首页 > 编程笔记

选择排序算法(C语言实现)

选择排序法的基本思想:给每个位置选择放当前最小元素,比如从 n 个数中选择出最小数放入第 1 个位置,在剩余 n-1 个元素里面再选择出最小数放第 2 个位置,依此类推,直到最后一个元素肯定是最大数。

选择排序算法步骤如下。
选择排序法是从排序的元素中选出最小的一个元素和第 1 个元素交换,然后从剩下的元素中选出最小的元素和第 2 个元素交换,重复这种处理的方法,直到最后一个元素为止。

示例

按照从小到大的顺序对字符数组排序。C语言编程代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 20
/*选择排序法*/
void select(char *arr,int count)
{
    int pos;
    int i,j;
    char temp;
    for(i=0;i<count-1;i++)
    {
        pos=i;
        temp=arr[pos];
        for(j=i+1;j<count;j++)                /*查找最小字符*/
        {
            if(arr[j]<temp)
            {
                pos=j;                         /*保存新的最小字符的下标*/
                temp=arr[j];                      /*保存新的最小字符的值*/
            }
        }
        arr[pos]=arr[i];                     /*交换当前字符和最小字符两个元素的值和下标*/
        arr[i]=temp;
        printf("第%d次交换结果:[%s]\n",i+1,arr); /*交换后输出*/
    }
}
int main()
{
    char array[MAX];
    int count;
    printf("输入将排序的字符串:\n");
    gets(array);                           /*存储字符数组*/
    count=strlen(array);                     /*测试字符数组*/
    select(array,count);
    return 0;
}
运行结果:

输入将排序的字符串:
www.weixueyuan.net
第1次交换结果:[.wwwweixueyuan.net]
第2次交换结果:[..wwweixueyuanwnet]
第3次交换结果:[..awweixueyuwnwnet]
第4次交换结果:[..aewwixueyuwnwnet]
第5次交换结果:[..aeewixuwyuwnwnet]
第6次交换结果:[..aeeeixuwyuwnwnwt]
第7次交换结果:[..aeeeixuwyuwnwnwt]
第8次交换结果:[..aeeeinuwyuwxwnwt]
第9次交换结果:[..aeeeinnwyuwxwuwt]
第10次交换结果:[..aeeeinntyuwxwuww]
第11次交换结果:[..aeeeinntuywxwuww]
第12次交换结果:[..aeeeinntuuwxwyww]
第13次交换结果:[..aeeeinntuuwxwyww]
第14次交换结果:[..aeeeinntuuwwxyww]
第15次交换结果:[..aeeeinntuuwwwyxw]
第16次交换结果:[..aeeeinntuuwwwwxy]
第17次交换结果:[..aeeeinntuuwwwwxy]

首先使用 gets() 函数获取字符数组元素,然后调用排序函数。

选择排序法使用双循环,每一轮找到最小的元素,保存该元素的下标和值,然后和本轮比较中的顶层元素交换,接下来进入下一个轮比较找到最小元素再交换。

优秀文章