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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 时序数据库 VS 工业实时数据库「建议收藏」

    时序数据库 VS 工业实时数据库「建议收藏」时序数据库和实时数据库到底有啥区别?本期我们就来聊聊时序数据库和传统工业实时数据库的那些事儿。

    2022年9月1日
    4
  • crane:字典项与关联数据处理的新思路[通俗易懂]

    crane:字典项与关联数据处理的新思路[通俗易懂]前言在我们日常开发中,经常会遇到一些烦人的数据关联和转换问题,比如典型的:对象属性中个有字典id,需要获取对应字典值并填充到对象中;对象属性中有个外键,需要关联查询对应的数据库表实体,并获取其

    2022年8月16日
    7
  • linux下杀死某个进程_shell脚本获取进程号并杀死进程

    linux下杀死某个进程_shell脚本获取进程号并杀死进程在做项目的时候经常会出现程序死机、锁死、无响应等情况,这时候就需要找到程序相应的进程将其杀掉即可。步骤如下:1.定位进程top命令:可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理。输入top后可以看到如下的界面,实时显示进程情况。ps命令:processstatus的简称,用于报告当…

    2022年9月28日
    1
  • python中for循环的用法1+2+3…+50的和_python结束for循环

    python中for循环的用法1+2+3…+50的和_python结束for循环1.一般格式range(stop)#0~stop-1range(start,stop)#start~stop-1range(start,stop,step)#start~stop-1,step表示步长注:Python中break,continue的用法与C中一致2.在enumerate中的用法enumerate()(单词意思是枚举的意思)是python中的内置函数,enumera

    2022年8月12日
    12
  • GIT使用基础知识

    GIT使用基础知识

    2021年5月11日
    93
  • 微信开放平台PC端扫码登录功能个人总结

    微信开放平台PC端扫码登录功能个人总结最近公司给我安排一个微信登录的功能,需求是这样的:  1.登录授权    点击二维码图标后,登录界面切换为如下样式(二维码),微信扫描二维码并授权,即可成功登录;      若当前账号未绑定微信账号,扫描后提示“您的账号未绑定微信号,请先登录绑定”;      点击“返回”按钮,界面切换为账号密码登录;      若微信号绑定多个账号在,则展示所绑定全部账号的用户名…

    2022年4月29日
    144

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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