C语言实现选择排序

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个数中找出最小者,然后与第二个数进行交换,

大家好,又见面了,我是你们的朋友全栈君。

选择排序是在每一轮比较中不是每当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]);
	}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/153031.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号