算法表述:

选择排序的基本原理是以序列首元素位置为基准位置,每次将该基准位置的元素和后面元素逐个进行比较,挑选最大或者最小的那个数放在基准位置上,一趟比较结束后,然后将基准位置设置为该位置的下一位置,重复上述操作,直到基准被安排在序列的最后有一个位置时,此时序列已经排列完成。

算法执行过程分析:

例如:88、5、15、56、32、18、69
说明:按照从小到大的顺序进行排序,其中每条彩色线条为两数之间的比较,其条数为比较次数.图示为比较结果,过程较为简单,请读者自行分析.
(1)第一躺比较:

此时最小数5已经放在最开始的位置。
(2)第二趟比较:

此时将第二小的数字放在当前序列的开头
(3)第三趟排序:

此时将第三小的数字放在当前序列的开头
以此类推,可得到最终结果为:5、15、18、32、56、69、88

代码实现:

void Select_Sort(int *arr,int len)
{int small = 0;for (int i = 0; i < len - 1; i++) {small = i;int j = i + 1;for (; j < len; j++) {if (arr[j] < arr[small]) {small = j;}}int temp = arr[i];arr[i] = arr[small];arr[small] = temp;}
}

总结:

通过计算选择排序算法的时间复杂度为O(n^2),由于借助了辅助空间temp,故其空间复杂度为O(1)。选择排序算法是一种不稳定的排序算法。

经典排序算法-----选择排序(C语言实现)相关推荐

  1. C语言基础排序算法-选择排序

    C语言基础排序算法-选择排序 什么是选择排序? 选择排序(Selection sort)是一种简单直观的排序算法,第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从 ...

  2. C语言排序算法 选择排序 插入排序 快速排序 qsort实现快排 堆排序

    常见排序算法 选择排序 选择排序(Selection sort)是一种简单直观的排序算法. 它的工作原理如下. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素 ...

  3. 十大经典排序算法-选择排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  4. Java排序算法——选择排序

    Java排序算法--选择排序(Selection sort) 传送门 冒泡排序 插入排序 简述 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找 ...

  5. python排序算法-选择排序

    python排序算法-选择排序 一.选择排序 1.一趟排序纪录最小的数,放在第一个位置 2.再一次排序记录列表无序区最小的数,放在第二个位置 关键 有序区.无序区.无序区最小数的位置 代码 def s ...

  6. 排序算法-选择排序-堆排序

    排序算法-选择排序-堆排序 堆排序是一种树型选择排序方法.在排序过程中,将 L [ 1... n ] L[1 ... n] L[1...n]看成是一棵完全二叉树的顺序存储结构,利用完全二叉树中双亲结点 ...

  7. 排序算法---选择排序(java版)

    简单选择排序 原理 选择排序(Selection Sort)的原理有点类似插入排序,也分已排序区间和未排序区间.但是选择排序每次会从排序区间中找到最小的元素,将其放到已排序区间的末尾. 简单选择排序执 ...

  8. 排序算法--选择排序(Java实现)

    选择排序概念 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中 ...

  9. 排序算法——选择排序法(Select Sorting)

    选择排序(Select Sorting) 基本介绍 ​ 选择排序也属于内部排序法,是从预排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的 选择排序思想 ​ 选择排序(Selec ...

最新文章

  1. 辩论届人机大战:IBM新AI完胜人类冠军!
  2. KVM嵌套虚拟化 -- 在虚拟机中创建虚拟机
  3. JQuery 分割函数(split)的用法和定义
  4. Git 的工作区、暂存区、版本库—— Git 学习笔记 15
  5. android 4.0.4 usb调试,安卓手机4.0怎么打开usb调试?图文详解附视频
  6. js怎么函数怎么给另一个函数传值并且不调用_2020年最火爆的Vue.js面试题
  7. rails 开发随手记 9
  8. 多个需要验证的输入框思路问题
  9. redis数据库实例
  10. 开发工具-压力测试工具 ab
  11. 支付接口申请_微信小程序商城如何开通支付功能
  12. md 生成目录 码云_码云搭建博客
  13. win7左上角白杠一直闪_win10换win7
  14. RabbitMQ入门中篇
  15. Smart3D系列教程6之 《案例实战演练3——倾斜数据正射影像及DSM的生产》
  16. pycharm遇坑指南(win32gui)
  17. php使用ElasticSearch
  18. 如何搭建简易又安全的企业内部文件服务器?
  19. 【Steam VR 2.0】3. Skeleton Poser 自定义抓取手势的使用
  20. 数字电路要点总结-TTL电路分析

热门文章

  1. moment.js 搜索栏获取最近一周,一个月,三个月,半年,一年时间
  2. C++ 控制台程序,窗口程序,静态库,动态库的区别
  3. 安森美推出超快恢复二极管 整流器SURS8320T3G 3A200V 广泛应用于各种高频逆变器件
  4. 《一天攻破K60》笔记(使用山外库5.3版本)
  5. Ansible-playbook的使用
  6. 详解 3dmax SDK 环境搭建与QT配置
  7. ios修改apn的插件_GitHub - SuPair/APN: [已废弃]适合 iOS 7 的 APN 设置工具,又一个没过审核的周末项目...
  8. 关于iOS系统中通讯录的访问
  9. Linux入门:tar、gzip、bzip2以及zip的区别
  10. 机票退订c语言程序,c语言程序设计告飞机票预订系统.doc