选择排序算法(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笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。