经典排序算法(6)——直接选择排序算法详解
直接选择排序(Straight Select Sort)是一种典型的选择排序算法,通过不断选择序列中最大(小)的元素。
一、算法基本思想
(1)基本思想
直接选择排序的基本思想就是:不断从未排序队列中选择最大(小)的元素放到已排序队列队尾,直至所有元素都排好序。
(2)运行过程
直接选择排序算法的运作如下:
1、首先在原始序列中找到最小(大)元素,存放到排序序列的起始位置
2、再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
3)重复第二步,直到所有元素均排序完毕。
(3)示例
二、算法实现(核心代码)
C++实现:
void selection_sort(int arr[], int len) {int i, j, min;for (i = 0; i < len - 1; i++) {min = i;for (j = i + 1; j < len; j++)if(arr[min] > arr[j])min = j;swap(arr[i], arr[min]);} }
Java实现:
public void selection_sort(int[] arr) {int i, j, min, temp, len = arr.length;for (i = 0; i < len - 1; i++) {min = i;for (j = i + 1; j < len; j++)if (arr[min] > arr[j])min = j;temp = arr[min];arr[min] = arr[i];arr[i] = temp;} }
三、性能(算法时间、空间复杂度、稳定性)分析
直接选择排序平均时间复杂度为O(n^2);空间复杂度为O(1);是不稳定的排序算法。
原始序列: 21,25,49,25*,16,08
排序后:08,16, 21,25*,25,49
两个25的位置变化了,所以是不稳定的。
经典排序算法(6)——直接选择排序算法详解相关推荐
- 经典算法之直接选择排序
作者简介:大家好我是小唐同学(๑><๑),为梦想而奋斗的小唐,让我们一起加油!!! 个人主页:小唐同学(๑><๑)的博客主页 系列专栏:数据结构 博友们如果也是新手入门数据 ...
- 【经典算法学习-排序篇】直接选择排序
一.选择排序 1.基本概念和介绍 选择排序的核心思想是:每一趟从无序区中选出关键字最小(或最大)的元素,按顺序放在有序区的最后(生成新的有序区,无序区元素个数减1),直到全部排完为止. 换句话说就是: ...
- 《数据结构与算法》实验:排序算法实验比较——选择排序 堆排序
<数据结构与算法>实验和课程Github资源 <数据结构与算法>实验:线性结构及其应用--算术表达式求值 <数据结构与算法>实验:树型结构的建立与遍历 <数据 ...
- python算法与数据结构-选择排序算法(33)
阅读目录 一.选择排序的介绍 二.选择排序的原理 三.选择排序的图解 四.选择排序总结 五.选择排序的python代码实现 六.选择排序的C语言代码实现 七.选择排序的时间复杂度 八.选择排序的稳定性 ...
- 【大话数据结构算法】直接选择排序
选择类排序的主要动作是"选择",直接选择排序采用最简单的选择方式,从头至尾顺序扫描序列,找出最小的一个记录,和第一个记录交换,接着从剩下的记录中继续这种选择和交换,最终使序列有序. ...
- Java常见排序算法之直接选择排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- java 排序原理_简单选择排序算法原理及java实现(超详细)
简单选择排序的原理 简单选择排序的原理非常简单,即在待排序的数列中寻找最大(或者最小)的一个数,与第 1 个元素进行交换,接着在剩余的待排序的数列中继续找最大(最小)的一个数,与第 2 个元素交换.以 ...
- 排序算法:简单选择排序算法实现及分析
简单选择排序算法介绍 简单选择排序(Simple Selection Sort)就是通过n-1次关键字排序之间的比较,从n-i+1个记录中选择关键字最小的记录,并和第i(1<=i<=n)记 ...
- java选择排序代码_Java排序算法总结之选择排序
本文实例讲述了Java排序算法总结之选择排序.分享给大家供大家参考.具体分析如下: 选择排序的基本操作就是每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部 ...
- 一步一步写算法(之选择排序)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 选择排序是和冒泡排序差不多的一种排序.和冒泡排序交换相连数据不一样的是,选择排序只有在确定了最 ...
最新文章
- R双样本t检验(WELCH TWO-SAMPLE T-TEST)
- 内地计算机学校,全球大学计算机实力排名:清北人工智能内地前2
- WildFly和Docker上的Java EE 7动手实验室
- 编写一个函数,该函数能判断一个英文句子str(带空格)中是否含有某个单词w,如“How old are you?”含有“old”。在main函数中输入一个英文句子,再输入一个单词,如果英文句子中含有那
- 独立磁盘冗余阵列:RAID
- phylip软件_进化树专题(五)| 密码子分区软件介绍
- 如何将数据库中的记录表导入到VC中
- 基于springboot的社团管理系统
- 设计模式(2)-抽象工厂模式(Abstract Factory)与生成器模式(Builder)模式
- matlab方差 anov,MATLAB单因素方差分析
- opencv 4.5.5 imread 失败(报错)的处理方式
- Android动态获取权限(读写、获取手机状态、定位)
- 【交换机】交换机简介
- 锐捷 linux无法上网,通过锐捷认证了,为什么还不能上网?
- 【GDOI2018模拟7.7】暴力大神hxx 树形dp
- 电子邮箱的工作原理以及SMTP、POP3、IMAP之间的联系和区别
- Quartus中仿真时出现no simulation input file assignment specify 解决方法 (转载)
- 成神结局量子计算机雏惨,成神之日:消失数月之后雏再次出现,不过形象却差点让人认不出...
- 【Kafka】三.Kafka怎么保证高可用 学习总结
- Win2008nbsp;64位下.Net访问MDAC…
热门文章
- 《零基础看得懂的C语言入门教程 》——(三)轻轻松松理解第一个C语言程序
- C++入门指南及实战 第二步 HelloWorld及扩展详解
- java反射有什么用_java反射的作用知识点总结
- 每日一笑 | 程序员和产品经理打架了,怎么办?
- 每日一笑 | 终于知道为什么胖了之后气质会垮了
- 神经网络告诉我,谁是世界上最「美」的人?
- java.lang.illegalagr_spring – java.lang.IllegalArgumentException:环境不能为null
- colorkey唇釉是否安全_colorkey空气唇釉,19/支
- 操作系统概念 ppt_智能家居操作系统三国拉锯,要出结果了吗?
- 超详细图解!【MySQL进阶篇】MySQL架构原理