直接选择排序(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. 经典算法之直接选择排序

    作者简介:大家好我是小唐同学(๑>؂<๑),为梦想而奋斗的小唐,让我们一起加油!!! 个人主页:小唐同学(๑>؂<๑)的博客主页 系列专栏:数据结构 博友们如果也是新手入门数据 ...

  2. 【经典算法学习-排序篇】直接选择排序

    一.选择排序 1.基本概念和介绍 选择排序的核心思想是:每一趟从无序区中选出关键字最小(或最大)的元素,按顺序放在有序区的最后(生成新的有序区,无序区元素个数减1),直到全部排完为止. 换句话说就是: ...

  3. 《数据结构与算法》实验:排序算法实验比较——选择排序 堆排序

    <数据结构与算法>实验和课程Github资源 <数据结构与算法>实验:线性结构及其应用--算术表达式求值 <数据结构与算法>实验:树型结构的建立与遍历 <数据 ...

  4. python算法与数据结构-选择排序算法(33)

    阅读目录 一.选择排序的介绍 二.选择排序的原理 三.选择排序的图解 四.选择排序总结 五.选择排序的python代码实现 六.选择排序的C语言代码实现 七.选择排序的时间复杂度 八.选择排序的稳定性 ...

  5. 【大话数据结构算法】直接选择排序

    选择类排序的主要动作是"选择",直接选择排序采用最简单的选择方式,从头至尾顺序扫描序列,找出最小的一个记录,和第一个记录交换,接着从剩下的记录中继续这种选择和交换,最终使序列有序. ...

  6. Java常见排序算法之直接选择排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  7. java 排序原理_简单选择排序算法原理及java实现(超详细)

    简单选择排序的原理 简单选择排序的原理非常简单,即在待排序的数列中寻找最大(或者最小)的一个数,与第 1 个元素进行交换,接着在剩余的待排序的数列中继续找最大(最小)的一个数,与第 2 个元素交换.以 ...

  8. 排序算法:简单选择排序算法实现及分析

    简单选择排序算法介绍 简单选择排序(Simple Selection Sort)就是通过n-1次关键字排序之间的比较,从n-i+1个记录中选择关键字最小的记录,并和第i(1<=i<=n)记 ...

  9. java选择排序代码_Java排序算法总结之选择排序

    本文实例讲述了Java排序算法总结之选择排序.分享给大家供大家参考.具体分析如下: 选择排序的基本操作就是每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部 ...

  10. 一步一步写算法(之选择排序)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 选择排序是和冒泡排序差不多的一种排序.和冒泡排序交换相连数据不一样的是,选择排序只有在确定了最 ...

最新文章

  1. R双样本t检验(WELCH TWO-SAMPLE T-TEST)
  2. 内地计算机学校,全球大学计算机实力排名:清北人工智能内地前2
  3. WildFly和Docker上的Java EE 7动手实验室
  4. 编写一个函数,该函数能判断一个英文句子str(带空格)中是否含有某个单词w,如“How old are you?”含有“old”。在main函数中输入一个英文句子,再输入一个单词,如果英文句子中含有那
  5. 独立磁盘冗余阵列:RAID
  6. phylip软件_进化树专题(五)| 密码子分区软件介绍
  7. 如何将数据库中的记录表导入到VC中
  8. 基于springboot的社团管理系统
  9. 设计模式(2)-抽象工厂模式(Abstract Factory)与生成器模式(Builder)模式
  10. matlab方差 anov,MATLAB单因素方差分析
  11. opencv 4.5.5 imread 失败(报错)的处理方式
  12. Android动态获取权限(读写、获取手机状态、定位)
  13. 【交换机】交换机简介
  14. 锐捷 linux无法上网,通过锐捷认证了,为什么还不能上网?
  15. 【GDOI2018模拟7.7】暴力大神hxx 树形dp
  16. 电子邮箱的工作原理以及SMTP、POP3、IMAP之间的联系和区别
  17. Quartus中仿真时出现no simulation input file assignment specify 解决方法 (转载)
  18. 成神结局量子计算机雏惨,成神之日:消失数月之后雏再次出现,不过形象却差点让人认不出...
  19. 【Kafka】三.Kafka怎么保证高可用 学习总结
  20. Win2008nbsp;64位下.Net访问MDAC…

热门文章

  1. 《零基础看得懂的C语言入门教程 》——(三)轻轻松松理解第一个C语言程序
  2. C++入门指南及实战 第二步 HelloWorld及扩展详解
  3. java反射有什么用_java反射的作用知识点总结
  4. 每日一笑 | 程序员和产品经理打架了,怎么办?
  5. 每日一笑 | 终于知道为什么胖了之后气质会垮了
  6. 神经网络告诉我,谁是世界上最「美」的人?
  7. java.lang.illegalagr_spring – java.lang.IllegalArgumentException:环境不能为null
  8. colorkey唇釉是否安全_colorkey空气唇釉,19/支
  9. 操作系统概念 ppt_智能家居操作系统三国拉锯,要出结果了吗?
  10. 超详细图解!【MySQL进阶篇】MySQL架构原理