内部排序算法——选择排序

get_seed协议 【代码】get_seed协议。 阅读详情

选择排序法可使用两种方式排序:从小到大或从大到小;例如:当N个数据需要由大至小排序时,首先将第一个位置的数据依次和第2、3、4……、N个位置的数据进行比较。如果数据大于或等于其中一个位置,则不变;若小于其中一个位置的数据,则两个位置的数据互换。互换后第1个位置的数据继续与后续位置的数据进行比较,直到位置最末端,此时第一个位置的数据即为此排序数组的最大值。接下来选择第二个位置的数据,依次与第3、4……、N个位置的数据进行比较,将最大值放入第二个位置。此循环方法直到N-1个位置的最大值找到后即可完成选择排序法由大到小的排列。下面仍然利用数组6、4、9、8、3的由小到大排序过程来说明选择排序法的演算方式。

原始数据:6、4、9、8、3

第一次扫描:先找到这个数组中的最小值,与第一个元素进行交换;

第一次扫描过程:第一个位置的数据与第2、3、4、5个位置的数据依次比较,如果第一个位置的数据小于等于其中一个位置的数据,则不变;若大于其中一个位置的数据则交换位置;则6与4比较,6>4,交换位置得4、6、9、8、3;因为第一个位置的数据发生了变化,因此,再次将第一个位置的数据与第3、4、5个位置的数据比较:4比9和8都小,因此不用交换位置,而4比3小,交换位置为:3、6、9、8、4

因此第一次扫描结果:3、6、9、8、4;

第二次扫描:先找到这个数组(除第一个元素外)中的最小值,与第二个元素进行交换;

第二次扫描过程:将第二个位置的数据与第3、4、5个位置的数据依次比较,如果第二个位置的数据小于等于其中一个位置的数据,则不变;若大于其中一个位置的数据则交换位置;则6与9、8比较,不交换位置,而6与4比较交换位置得3、4、9、8、6

因此第二次扫描结果:3、4、9、8、6

第三次扫描:先找到这个数组(除第一、二个元素外)中的最小值,与第三个元素进行交换;

第三次扫描过程:将第三个位置的数据与第4、5个位置的数据依次比较,如果第三个位置的数据小于等于其中一个位置的数据,则不变;若大于其中一个位置的数据则交换位置;则9与8比较,交换位置得:3、4、8、9、6;然后8再与6比较,交换位置得3、4、6、9、8

因此第三次扫描结果:3、4、6、9、8

第四次扫描:先找到这个数组(除第一、二、三个元素外)中的最小值,与第四个元素进行交换;

第四次扫描过程:将第四个位置的数据与第5个位置的数据进行比较,若小于第5个位置的数据则进行交换,否则不交换,因为9<8,则交换位置得:3、4、6、8、9

因此最终选择排序的结果为:3、4、6、8、9

对选择排序法的分析如下:

1、无论是最坏情况、最佳情况及平均情况都需要找到最大值(或最小值),因此比较次数为:(n-1)+(n-2)+……+1=n*(n-1)/2次,时间复杂度为O(n^2);

2、由于选择排序是每次求出未排序数组中的最大或最小值与该数组第一个键值交换,因此是不稳定排序;例如:2(1),2(2),1对其按由小到大排序,这里2(1)与2(2)表示第一个2和第二个2,选择排序后:1、2(2)、2(1),很明显这两个2的顺序发生变化,则说明选择排序是不稳定排序。

3、选择排序只需一个额外的空间,所以空间复杂度为最佳。

4、此排序法适用于数据量小或有部分数据已经排过序的数组。

范例程序:

/*

[名称]:选择排序法

*/

#include<stdio.h>
#define SIZE 5
void showdata(int *);//声明输出数组程序
void select(int *);//声明选择排序函数
int main()
{
int data[5]={6,4,9,8,3};
printf("原始数据为:");
showdata(data);
select(data);
getchar();
return 0;
}
void showdata(int data[])
{
for(int i=0;i<SIZE;i++)
printf("%d ",data[i]);
printf("\n");
}
void select(int data[])
{
int temp=0;
for(int i=0;i<SIZE-1;i++)
{
for(int j=i+1;j<SIZE;j++)
{
if(data[i]>data[j])
{
temp=data[i];
data[i]=data[j];
data[j]=temp;
}
}
printf("第%d次排序结果:",(i+1));
showdata(data);
}
}

输出结果:

搭建你的第一个MCP服务器(Python版) 在上两篇博客中,我们已经对MCP(Model Context Protocol)有了初步的了解。MCP是一种强大的协议,能够简化LLM(大型语言模型)与外部工具的交互。今天,我们将通过一个具体的例子,展示如何使用Python搭建一个简单的MCP服务器。通过这个过程,你将能够更好地理解MCP的工作原理,并为后续的应用开发打下基础。在MCP中,工具(Tool)是服务器提供给LLM的接口。我们将定义一个简单的工具,用于接收输入文本并返回处理后的结果。首先,我们需要定义一个工具类。这个工具类将继承自,并实现run。 阅读详情

相关推荐

EM4095低频RFID曼彻斯特解码实战:从原理图到MCU代码实现

本文详细介绍了EM4095低频RFID读卡器的设计与实现,从芯片工作原理、天线设计到曼彻斯特解码算法。重点讲解了基于STM32的MCU代码实现,包括定时器捕获、数字滤波和错误处理,为开发125kHz RFID系统提供实用指南。

oil88的博客 713

设计简单的后台管理的数据排序

场景: 前端需要展示一个列表(如:首页的轮播图),后台需要能够控制列表数据的排序。 需求: 自动规则 + 运营干预,干预包括:降低排名,提升排名,设定位置和新增item 实现: 在Web后台管理系统中,列表形式的数据排序功能是很常见的需求。要实现这类功能,给数据表增加一个排序字段order,越大排名越靠前,数字相同时按照自动规则(如:id)排序,这样,就可以实现了: id name...

weixin_30563917的博客 959

Obsidian的Git插件设置配置全流程 -- 简单的电脑端多平台同步方案及常见问题

Git同步obsidian的保姆级教程和常见问题

weixin_44370439的博客 1万+

数据结构算法学习总结-慕课网(三)插入排序,与选择排序的比较(从小到大)

数据结构算法学习总结-慕课网(三)插入排序,与选择排序的比较(从小到大)1.思路插入排序是将下标为0,1,...的数组的第1个元素开始,第二层循环,如果后一个比前一个小,那么就将后一个与前一个交换位置,如果没有则提前结束二层循环2.与选择排序异同相同点目的都是从小到大排序时间复杂度都为O(n^2)不同点插入排序和选择排序,最大的区别在于,选择排序第二层循环挨个比较大小,然后选出最小的一个,没有提前...

libinbin147256369的博客 289

MFC停靠窗口实战:CDockablePane从创建到控件布局的完整指南(附残影问题排查)

本文提供了MFC中CDockablePane停靠窗口的完整实战指南,涵盖从自定义窗格类创建、主框架集成、内部控件布局到高级功能定制的全过程。针对开发中常见的“残影”视觉问题,文章深入剖析了其根源,并给出了系统性的排查步骤与解决方案,帮助开发者构建稳定、专业的可停靠用户界面。

sun99的博客 613

在运行opencv时出现的两个问题:AttributeError: module ‘cv2‘ has no attribute ‘gapi_wip_gst_GStreamerPipeline‘

解决了opencv的两个问题:由问题一引出 AttributeError: module 'cv2' has no attribute 'gapi_wip_gst_GStreamerPipeline' cv2.error:OpenCV(4.1.2)C:\projects\opencvpython\opencv\modules\highgui\src\window.cpp:717:error: (-2:Unspecified error) The function is not implemented...

hu_yinghui的博客 3274

选择排序法(从小到大排序)

#include&lt;stdio.h&gt; int main() { int a[6],t=0,h=0; int i=0; int j=0; for(i=0; i&lt;6; i++) { scanf("%d “, &amp;a[i]); } for(i=0; i&lt;5; i++)//六个数只需要比较五次 { t=i; for(j=i+1; j&lt;6; j++)//需要与后面的数进行比...

海风来的博客 4361

LVS 负载均衡面试题及参考答案

什么是 LVS 负载均衡?它的主要作用是什么? LVS(Linux Virtual Server)是一个基于 Linux 内核的开源负载均衡项目。它通过将请求流量按照一定的算法分发到后端的多个真实服务器(Real Server)上,从而实现负载均衡的功能。 从原理上来说,LVS 工作在网络层和传输层之间。当客户端发起请求时,请求首先到达 LVS 服务器,LVS 会根据预先设定的规则和算法,比如轮询(Round - Robin)、加权轮询(Weighted Round - Robin)、最少连

大模型大数据攻城狮的专栏 1469

选择法排序

选择法排序:假设有N个数要按照从大到小的顺序排序,选择法就是先设第一个数是最大的(进行第一次大循环),然后将这个数与数组中剩下的数依次比较,如果剩下的数中有比这个数大的,那就两者交换,直至第一个数是最大的为止;然后再设第二个数为第二大的(进行第二次大循环),将第二个数与数组中除第1、2数外的其余数进行比较,如果有大值,则进行两两交换,直至第二个数是剩下数中最大的为止。 综上,设N个数(设a[N])进行从大到小的排序,每次循环都设a[i]为最大值,将a[i]与剩余的N-i个数...

fzhenzi的博客 9525

【AI工具】免费获取各类AI大模型APIKEY的使用教程,以硅基流动+Deepseek为例

【AI工具】免费获取各类AI大模型APIKEY的使用教程,以硅基流动+Deepseek为例

funfan的博客 4261

基于深度学习的心律失常的自动分类

基于深度学习的心律失常的自动分类 作者:禅与计算机程序设计艺术 1. 背景介绍 1.1 心律失常的危害与检测的重要性 心律失常是一种常见的心血管疾病,严重威胁着人们的健康和生命。据统计,全球每年有数百万人因心律失

AI架构师小马 1139

选择排序的初步理解

选择排序 选择排序(从小到大):每次都只能排好(第一个),就是在除第一个数以外的数里面找一个最小的数,将这个数于第一个数比较,小就交换。 选择排序思想(从小到大): 1.取位排序序列的第一个元素下标赋给smallest 2.除标记位,遍历剩下未排序的元素,如果小于arr[smallest],将其下表赋给smallest 3.如果smallest不等于第一个元素下标,则将arr[smallest]与arr[i]互换 关键代码: void select_sort(int arr[],int len){ in

weixin_45449030的博客 198

密码学系列3-Elgamal加密及其IND-CPA安全性证明

但这没有任何影响,敌手本身就只能知道公钥,他并没有能力知道挑战者是否知道对应的私钥。所以上述整个游戏就是一个模拟实验,敌手无法区分挑战者运行的是这个模拟实验,还是真正的按照第一节的算法构造的实验(挑战者知道私钥…为什么合起来的时候有1/2:因为T既可能是随机的也可能是g^{ab},这两种情况概率为1/2。能够攻破Elgamal加密方案,那么挑战者利用敌手的能力构建下面游戏,来求解困难性问题DDH。就是挑战者选的随机数,虽然挑战者自己也不知道。),否则挑战者输出0,作为DDH的回答。

qq_41359358的博客 1249

常见内部排序算法之选择排序

[size=large][color=red]常见内部排序算法[/color][/size] 包括选择[b]排序算法,交换排序算法,插入排序算法,基数算法,桶式算法还有归并算法。[/b] 其中选择排序算法又包括:[b]简单选择排序算法[/b]与[b]堆排序[/b]。 选择算法,顾名思义,就是从中选择需要的,然后再与目标地址进行交换。 [size=medium][color=red]简单选择...

edr1991的专栏 169

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

各种内部排序算法的比较及应用(插入排序、交换排序、选择排序、归并排序、基数排序)

这篇文章总结了所有内部排序的适用场景,性质特点,以及空间和时间复杂度的考量; 前半部分是对内部排序的总结,后半部分是对所有内部排序的具体性能分析;

心碎烤肠的博客 3317

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

对以下6种常用的内部排序算法进行比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。

题目要求: (1)对以下6种常用的内部排序算法进行比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。 (2)待排序表的表长不小于100;其中的数据要用伪随机数产生程序产生;至少要用5组不同的输入数据作比较;比较的指标为有关键字参加的比较次数和关键字的移动次数(关键字交换计为3次移动)。 (3)最后要对结果作出简单分析,包括对各组数据得出结果波动大小的解释。 (4)希尔排序:先将整个待排记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次

qq_43541242的博客 4265

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

数据结构——内部排序算法的选择和应用

要在实际应用中选择最适合的排序算法,需对各种内部排序算法的性能和特性进行全面比较,这些比较涵盖时间复杂度、空间复杂度、稳定性等核心指标,通过清晰的对比能帮助我们把握每种算法的优劣与适用边界。

分享人工智能领域原创文章 1089

七大内部排序算法总结(插入排序、希尔排序、冒泡排序、简单选择排序、快速排序、归并排序、堆排序)

写在前面:                  排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素的任意序列,重新排列成一个按关键字有序的序列。因此排序掌握各种排序算法非常重要。对下面介绍的各个排序,我们假定所有排序的关键字都是整数、对传入函数的参数默认是已经检查好了的。只是简单的描述各个算法并给出了具体实现代码,并未做其他深究探讨。 基础知识:

李冰-冰斌 1万+

各种内部排序算法复杂度的比较和排序方法的选择

按平均时间将排序分为四类: (1)平方阶(O(n2))排序      一般称为简单排序,例如直接插入、直接选择和冒泡排序; (2)线性对数阶(O(nlgn))排序      如快速、堆和归并排序; (3)O(n1+£)阶排序      £是介于0和1之间的常数,即0 (4)线性阶(O(n))排序      如桶、箱和基数排序。

我的仓库 My Storehouse 3937

排序算法复习之——内部排序算法之——选择排序

排序算法复习之——内部排序算法之——选择排序 选择排序分为:直接选择排序、堆排序 选择排序思想:每次从待序排记录中选出关键字最小的记录,顺序放在已排好的子文件最后,直到全部记录排序完毕。 一、直接选择排序思想:n个记录的直接选择排序可以经过n-1次直接选择排序得到有序结果。 时间复杂度:O(n*n)  空间复杂度:O(1)    不稳定 步骤: (1) 初始状态,无序区为A[1…n],

feitianxuxue的专栏 1415

内部排序算法之选择排序

个人觉得选择排序算法是最容易理解的排序算法,我们在日常生活中经常用这种方法排序。 每次从待排序的系列中选出最小的元素后,待排序的元素数目减少1,直到待排序系列中的元素个数为1,最后这个元素就是最大的元素, 排序完成。 选出待排序系列中最小元素的时候,需要遍历待排序系列中所有的元素, 发现逆序, 则交换。 为了减少交换次数,并且, 最终只需要和当前最小的元素交换,则 只需要记录当前最小元素的索引

karizhang的专栏 524

内部排序常用算法(含动图及算法性能测试程序,了解不同情况下的排序算法的选择)

本篇主要讲解内部排序的八种算法,及其中的递归实现以及非递归实现方法,并对各种算法进行性能测试,分析出对于不同数据性质最优的排序算法选择方式。

分享学习的知识,记录我的技术成长道路 1285

各种内部排序算法的比较和选择

各种内部排序算法比较和选择

changsoon 2284

八大内部排序算法(上)-冒泡、直接插入、简单选择、快速

八大内部排序算法(上)冒泡、直接插入、简单选择、快速 排序分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 我们这里说说八大排序就是内部排序。 1.直接插入排序 将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。即:先将序列的第1个记录看

D.W 的专栏 3042

各种内部排序算法复杂度的比较,排序方法的选择和常见算法的实现

  各种内部排序算法复杂度的比较和排序方法的选择  按平均时间将排序分为四类:(1)平方阶(O(n2))排序     一般称为简单排序,例如直接插入、直接选择和冒泡排序;(2)线性对数阶(O(nlgn))排序     如快速、堆和归并排序;(3)O(n1+£)阶排序     £是介于0和1之间的常数,即0(4)线性阶(O(n))排序     如桶、箱和基数排序。各种排序

892

内部排序算法之三【选择排序】

1.1. 基本描述         元素个数为n的数组,需要按照由小到大的顺序进行元素排序。 1.2. 算法分析          选择排序的基本思想:每一趟排序从未排好序的部分元素中选择一个值最小的元素,然后将其与这些未排好序的元素的第一个元素交换位置。容易发现,时间复杂度为O(n^2),是不稳定排序。 1.3. 代码实现 public cl

rik_csdn的博客 264
上一篇: 内部排序算法——插入排序法
下一篇: 面试时所遇问题总结
willian0621
博客等级 码龄17年 50粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值