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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python图像处理实战_数字图像处理与python实现pdf下载

    python图像处理实战_数字图像处理与python实现pdf下载数学形态学是一门建立在格论和拓扑学基础之上的图像分析学科,是数学形态学图像处理的基本理论。其基本的运算包括:腐蚀和膨胀、开运算和闭运算、图像顶帽运算和图像底帽运算、骨架抽取、形态学梯度、Top-hat变换等。万字长文整理,希望对您有所帮助。该系列文章是讲解PythonOpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。希望文章对您有所帮助,如果有不足之处,还请海涵~

    2022年10月14日
    5
  • Android UI Design

    Android UI Design

    2021年9月6日
    58
  • SQL Server 2014聚集列存储索引

    SQL Server 2014聚集列存储索引

    2021年11月26日
    41
  • iscsiadm命令详解_tempadm

    iscsiadm命令详解_tempadm#rpm–ivhiscsi-initiator-utils-6.2.0.742-0.5.el5.i386.rpm在服务器上安装了iSCSIinitiator以及iscsiadmiscsiadm是基于命令行的iscsi管理工具,提供了对iscsi节点、会话、连接以及发现记录的操作。iscsiadm的使用说明可以查看/usr/share/doc/iscsi-init

    2022年8月23日
    7
  • Arduino 硬件编程语言基础学习入门

    Arduino 硬件编程语言基础学习入门1、Arduino程序必要的setup()和loop()voidsetup(){}voidloop(){}setup()函数中的代码只会被运行一次,通常用来做一些初始化工作;loop()中的代码会被无限次地重复运行,此函数为程序的主体部分。2、程序中的值2.1变量和常量常量是一个字面量,只可以表示一个特定的量。2.2变量类型…

    2022年4月19日
    115
  • java栈堆方法区分别存放的东西_java创建栈和堆对象

    java栈堆方法区分别存放的东西_java创建栈和堆对象之前给大家讲了一下java栈和堆的区别,下面又要给大家详细的讲一下java栈和堆分别存放的是什么,一起来详细的了解一下吧!一、java栈、堆存放的是什么?在java当中,栈中,存放的是基本数据类型和堆中对象的引用,而,堆中,存放的则是对象。其他:一个对象的大小,是不能够估计的,我们又可以这样说,是能够动态变化的,可是在栈中,一个对象就只对应了一个4btye的引用,这也是堆和栈分离的好处。那么相信很…

    2025年9月16日
    5

发表回复

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

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