简单选择排序

简单选择排序的思想就是将未排序的子序列中最小的值(或者最大的值)排列到已经排好序的子序列后面

  1. 设置两层循环,第一层循环是遍历已经排好序的子序列,每次都指向该子序列的最后一个元素
  2. 第二层序列用来遍历后面没有排好序的序列,每次循环,都找到最小或者最大的元素,然后放到已经排好序的子序列后面
  3. 第一层循环从第一个元素开始,到第len - 1个元素结束,因为最后一个元素一定是最值元素
  4. 第二层循环从已经排好序的序列的后一个元素开始,到第len个元素位置结束,因为要遍历整个无序子序列

算法分析

  • 时间复杂度:

    • 最好的情况是正序,不需要移动;最坏的情况就是逆序,移动3(n-1)
    • 无论记录的初始排序如何,需要进行比较次数都是相同的,所以简单选择排序的时间复杂度是O(n^2)
  • 空间复杂度:
    • 只有两个记录交换时需要一个辅助空间,所以空间复杂度为O(1)

特点

  1. 就选择排序本身来说,它是一种稳定排序
  2. 可以用于链式结构
  3. 移动记录比较少,当一个记录占用空间比较多时,这个方法比直接插入排序来的快

C语言实现

/*** 简单选择排序*/
void selectSort(int arr[],int len)
{for (int i = 0; i < len - 1;i++){int min = i;for (int j = i + 1; j < len;j++){if(arr[j] < arr[min])min = j;}int temp = arr[min];arr[min] = arr[i];arr[i] = temp;}
}

【专插本-数据结构】简单选择排序相关推荐

  1. 数据结构 - 简单选择排序法

    数据结构 - 简单选择排序法 在之前的博文里已经介绍过排序的两个基本方法: 双重循环法和冒泡排序法. 基本思想 其实上面两种方法的基本思想都是一样的: 就是将排序步骤分成两层循环, 在内层的每1个循环 ...

  2. 数据结构-简单选择排序(C语言)

    文章目录 1.基本思想: 2.例子讲解: 3.代码实例C语言: 4.时间复杂度分析 1.基本思想: 第i趟排序开始时,当前有序区和无序区分别为R[0-i-1],R[i-n-1] (0<=i< ...

  3. 数据结构-选择排序(简单选择排序,堆排序)

    目录 1,简单选择排序 1.1,简单选择排序思想 1.2,选择排序的时间复杂度分析 1.3,简单选择排序代码实现 2,堆排序 2.1,什么是堆排序 2.2,堆排序的思想 2.3,堆排序时间复杂度分析 ...

  4. 《大话数据结构》第9章 排序 9.4 简单选择排序

    9.4.1 简单选择排序算法 爱炒股票短线的人,总是喜欢不断的买进卖出,想通过价差来实现盈利.但通常这种频繁操作的人,即使失误不多,也会因为操作的手续费和印花税过高而获利很少.还有一种做股票的人,他们 ...

  5. 【数据结构-排序】3.图解选择排序两种实现(简单选择排序/堆排序)

    简单选择排序(选择排序) 排序思想 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置 然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾. 以此类推,直到所有元素 ...

  6. Hark的数据结构与算法练习之简单选择排序

    /** 简单选择排序*/ public class SimpleSort {public static void main(String[] args) {int[] arrayData = { 5, ...

  7. 数据结构排序系列详解之五 简单选择排序

    在前面的博客中已经讲述了交换类的排序算法,这节中开始说说选择类的排序算法了,首先来看一下选择排序的算法思想: 选择排序的基本算法思想: 每一趟在 n-i+1 (i=1,2,3,--,n-1)个记录中选 ...

  8. 数据结构(八):排序 | 插入排序 | 希尔排序 | 冒泡排序 | 快速排序 | 简单选择排序 | 堆排序 | 归并排序 | 基数排序 | 外部排序 | 败者树 | 置换-选择排序 | 最佳归并树

    文章目录 第八章 排序 一.排序的基本概念 (一)什么是排序 (二)排序的应用 (三)排序算法的评价指标 (四)排序算法的分类 (五)总结 二.插入排序 (一)算法思想 (二)算法实现 (三)算法效率 ...

  9. 数据结构-排序(六)简单选择排序

    本文详细介绍了简单选择排序的算法思想.代码实现和算法效率分析,还包括示例和可视化动图,易理解! Let's go!

最新文章

  1. C语言--const修饰指针解析
  2. 一次实现可以在某些场合替代菱形继承?
  3. python合并路径_python url合并与分离
  4. 【已解决】TypeError: bind() takes exactly one argument (2 given)
  5. 新基建来了!5G边缘计算如何展现勃勃生机?
  6. 微信淘宝等平台要互通!?腾讯阿里字节回应
  7. 初学Java,第一段代码
  8. 【图像加密】基于matlab GUI彩色图像加密解密(带面板)【含Matlab源码 1231期】
  9. php streamsocketenablecrypto,PHPMailer发送邮件报错Msg:stream_socket_enable_crypto():
  10. WiFi连接过程简要分析
  11. 安装深度linux系统卡住不动,简单有效!一招解决深度Linux死机问题
  12. TSC条码打印机 条形码ActiveXbarcode()方法参数详解
  13. 工作中jQuery常用实例-主要功能总结整理
  14. spark中的cache()、persist()和checkpoint()的区别
  15. 饭后吃一种水果就能化痰止咳(附赠10个化痰小偏方)
  16. linux内核分析 轮换,Linux 内核源代码情状分析 chap2 存储管理 (6) - 页面的定期换出...
  17. Oracle(二)Oracle sql操作
  18. Win11系统.NET Framework 3.5怎么启用?
  19. 论文查重高怎么办?怎么修改?
  20. c语言是面向对象程序设计,C语言面向对象程序设计.ppt

热门文章

  1. 行业云赋能产数融合,云服务加速行业渗透
  2. Markdown中的公式、字母表示汇总
  3. 流水线技术是通过增加计算机硬件来实现的,学位论文--流水线仿真-实现与设计.doc...
  4. realme 真我 V23i配置怎么样 realme 真我 V23i价格是多少
  5. 2.Java Web之JavaScript
  6. 洗地机哪个牌子比较好?家用洗地机推荐
  7. 十年辗转4厂,百场校、社招面试后,我想给“后生仔”分享的一些秘密!
  8. EMM产品哪些功能特性只有在国内市场才被关注?
  9. (努比亚)手机键盘恢复
  10. [No000021]跟维多利亚学英语