C语言实现选择排序

Posted G_whang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言实现选择排序相关的知识,希望对你有一定的参考价值。

选择排序是在每一轮比较中不是每当a[i]<a[j]时候就交换,而是用一个变量k记下其中较小的元素的下标值,在a[i]与a[i+1]~a[n]全部进行比较后,只将a[i]与a[i+1] ~ a[n]中最小的值进行交换,为此每一轮只需要将a[i]与a[k]的值进行交换即可。
设有n个数据存储到从a[0]~ a[n+1]的n个数组元素中,则选择排序过程分为如下n-1步骤:
第一步:在第1~n个数中找出最小者,然后与第一个数进行比较,前1个数排好序
第二步:在第2~n个数中找出最小者,然后与第二个数进行交换,前2个数排好序

第n-1步:在第n-1 ~ n个数中找出最小者,然后与第n-1个数进行交换,排序结束
算法分析:
n个待排序的数据分别存放在一维数组中,外层循环是次数循环,循环控制变量i依次取值0~ n-2,对应第1步~ 第n-1步。循环体是在a[i] ~ a[n-1]中寻找最小的值及其下标,找到后与a[i]交换。
代码如下:

#include <stdio.h>

void main()
	 int i,j,k,n,temp,a[200];
	 printf("请输入需要排序的数据个数\\n");
	 scanf("%d",&n);// 从键盘输入待排序的数据个数
	for(i=0;i<n;i++) // 利用for循环依次将输入的数据放置在数组中
		scanf("%d",&a[i]);
	
	for(i=0;i<n-1;i++)// 外层循环 变量i控制排序总共进行n-1轮
		k=i;
		for(j=i+1;j<n;j++) //内层循环 变量j控制每轮进行比较的次数
			if(a[j]<a[k])
				k=j;   //k记录每轮比较中的最小者的下标
				if(k!=i) //将第i轮的最小者,与a[i]交换
					temp=a[i];
					a[i]=a[k];
					a[k]=temp;
				
			
		
	
	printf("排序后的数据如下:\\n");
	for(i=0;i<n;i++) // 利用for循环进行输出
		printf("%d\\t",a[i]);
	

以上是关于C语言实现选择排序的主要内容,如果未能解决你的问题,请参考以下文章

C语言冒泡排序

java实现选择排序

排序算法之冒泡和快排

数组排序

选择排序

排序算法之选择排序类