选择排序算法(C语言实现)
选择排序法的基本思想:给每个位置选择放当前最小元素,比如从 n 个数中选择出最小数放入第 1 个位置,在剩余 n-1 个元素里面再选择出最小数放第 2 个位置,依此类推,直到最后一个元素肯定是最大数。
选择排序算法步骤如下。
选择排序法是从排序的元素中选出最小的一个元素和第 1 个元素交换,然后从剩下的元素中选出最小的元素和第 2 个元素交换,重复这种处理的方法,直到最后一个元素为止。
选择排序法使用双循环,每一轮找到最小的元素,保存该元素的下标和值,然后和本轮比较中的顶层元素交换,接下来进入下一个轮比较找到最小元素再交换。
声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
选择排序算法步骤如下。
-
在长度为 N 的无序数组中,第 1 次遍历
n-1
个数,找到最小的数值与第 1 个元素交换; -
第 2 次遍历
n-2
个数,从剩下的数中找到最小的数值与第 2 个元素交换; - ……
-
第 n-1 次遍历,从剩下的数中找到最小的数值与第
n-1
个元素交换,排序完成。
选择排序法是从排序的元素中选出最小的一个元素和第 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]
选择排序法使用双循环,每一轮找到最小的元素,保存该元素的下标和值,然后和本轮比较中的顶层元素交换,接下来进入下一个轮比较找到最小元素再交换。
声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。