• 今天讲解一下简单选择排序的原理以及实现、复杂度和稳定性分析
  • 这个内容很简单,轻松加愉快,很快就过了~


目录

  • 简单选择排序
  • 1 基本思想
  • 2 动态图解
  • 3 代码
  • 4 复杂度分析

简单选择排序

1 基本思想

简单选择排序的基本思想是:每一趟(如第i趟)在后面n-i+1(i=1,2n-1)个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到第n-1趟做完,待排序元素只剩下1个,就不用再选了。


2 动态图解

还是上图的例子,动态图展示:


3 代码

void SelectSort(ElemType A[],int n) {for(i=0;i<n-1;i++){   //一共进行n-1趟min=i;    //记录最小元素位置for(j=i+1;j<n;j++)     //在A[i.n-1]中选择最小的元素if(A[j]<A[min]) min=j;   //更新最小元素位置if(min!=i) swap(A[i],A[min]);   //封装的swap()函数共移动元素3次}}

4 复杂度分析

① 空间复杂度

由于仅使用常数个辅助单元,故空间复杂度为0(1)

② 时间复杂度

最好的情况是移动0次,此时对应的表已经有序,但元素间比较的次数与序列的初始状态无关,始终是n(n-1)/2次,因此时间复杂度始终是0(n^2)

③ 稳定性

在第i趟找到最小元素后,和第i个元素交换,可能会导致第个元素与其含有相同关键字元素的相对位置发生改变。例如,表L=(221),经过一趟排序后L=(1,2,2),最终排序序列也是L=(1,22),显然2与2的相对次序已发生变化。

因此,简单选择排序是不稳定排序

排序算法 | 简单选择排序,算法的图解、实现、复杂度和稳定性分析相关推荐

  1. 排序算法之选择排序(简单选择排序、堆排序)

    选择排序(简单选择排序.堆排序) 选择排序 简单选择排序 概念 算法实现 堆排序 概念 算法实现 后续 选择排序 选择排序的基本思想是:每一趟在待排序元素中选取关键字最小(或最大)的元素加入有序子序列 ...

  2. java中的排序算法——简单选择排序,树形选择排序与堆排序(一)

    package com.sort; /**  * 选择排序:  * 简单选择排序,树形选择排序与堆排序  *   */ public class SelecSortDemo { /** * ----- ...

  3. 排序算法——简单选择排序(PythonJava)

    基本思想 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素( ...

  4. 数据结构排序算法——选择排序(简单选择排序)

    简单选择排序(Simple Selection Sort) 一.算法基本思想: 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放 ...

  5. 排序算法-简单选择排序

    文章目录 1.基本介绍 2.选择排序的思想 3.选择排序思路分析图 4.代码实现 1.基本介绍 选择排序属于内部排序算法,是从预排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的 ...

  6. 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现)

    转载:http://blog.csdn.net/pzhtpf/article/details/7559943 3.简单选择排序 (1)基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换 ...

  7. 直接插入排序,折半插入排序,希尔排序,简单选择排序,冒泡排序,快速排序模板以及比较次数与移动次数的分析,折半搜索算法模板

    #include<stdio.h> #include<time.h> #include <stdlib.h>const int maxx=1e2+1; int a[ ...

  8. 选择排序:简单选择排序

    1. 选择排序思想 (1.1)选择排序的基本思想是:每一趟(例如第i趟)在后面n-i+1(i=1,2, ... , n)个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到第n-1趟做 ...

  9. [转载] python选择排序二元选择_选择排序:简单选择排序(Simple Selection Sort)

    参考链接: Python中选择排序Selection Sort 基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的 ...

最新文章

  1. scp 命令 路径_基于SSH的文件传输:scp命令
  2. WRF,WPS,WRF-Chem安装及编译步骤及bug总结(2)
  3. day02 pycharm 安装
  4. Linux下查看/管理当前登录用户及用户操作历史记录
  5. NSStringUIImage~NSData的相互转换以及中文转码
  6. go语言解析html
  7. ubuntu E470无线网卡驱动
  8. C语言中变量名加括号,为什么在声明变量时C ++允许我们在括号内将变量名括起来?...
  9. 22.哈希表(HashTable)
  10. LOIC低轨道离子拒绝服务攻击
  11. AHP(层次分析法)的全面讲解及python实现
  12. CefSharp入门-winform
  13. Composer 的常用命令
  14. Guava学习之Map
  15. vm打开虚拟机提示“未能启动虚拟机“解决方案
  16. XML解析(DOM方式)
  17. 悲观锁、乐观锁、自旋锁和读写锁
  18. folx pro 激活码使用安装下载教程(mac优秀下载工具)
  19. 【论文阅读】Entity Structure Within and Throughout: Modeling Mention Dependencies for Document-Level Relat
  20. 从头说起:基金采取券商结算模式的依据和影响

热门文章

  1. Html 教程 (5) “表格”三要素
  2. java元婴期(19)----java进阶(spring(3)----AOP相关概念实现方式)
  3. 2022年美国大学生数学建模竞赛常见问题汇总
  4. CTF——angr使用学习记录
  5. 5-Interrupt Management Framework
  6. python全球购代码_理解python的unicode字符串
  7. angr学习笔记(5)(栈符号化)
  8. linux migrations病毒守付进程分析
  9. 160个Crackme008
  10. 1.16 Java的异常跟踪栈