算法思想

第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。

图示过程

假设一个数列为{6, 3, 5, 7, 0},对该数列进行排序。整个排序过程入下图所示:

说明:上图为未优化的选择排序示意图。

动画展示

说明:此动图为优化后的选择排序,每趟只交换一次。

算法描述

  • 第1趟比较:拿第1个元素依次和它后面的每个元素进行比较,如果第1个元素大于后面某个元素,交换它们,经过第1趟比较,数组中最小的元素被选出,它被排在第一位。
  • 第2趟比较:拿第2个元素依次和它后面的每个元素进行比较,如果第2个元素大于后面某个元素,交换它们,经过第2趟比较,数组中第2小的元素被选出,它被排在第二位。
  • ......
  • 第n-1趟比较:第n-1个元素和第n个元素作比较,如果第n-1个元素大于第n个元素,交换它们。

算法优化

选择排序的核心是,在每趟比较中,找到本趟中最小的元素放在本趟比较的第1个位置,所以选择排序的每趟比较只需要交换一次即可,只要找到本趟比较中最小的元素和本趟比较中第1位置的元素交换即可。

算法性能

时间复杂度

空间复杂度

,只需要一个附加程序单元用于交换数据。

稳定性

不稳定排序方法。

代码实现

C语言和C++

inline void swap(int &a, int &b) {int temp = a;a = b;b = temp;
}void selection_sort(int nums[], int len) {if (len < 2) {return;}for (int i=0; i<len-1; i++) {int index = i;for (int j=i+1; i<len; j++) {if (nums[i] > num[j]) {index = nums[j]<nums[index] ? j : index;}}swap(i, index);}
}

JAVA

public static void selectionSort(int[] nums) {if (nums == null || nums.length < 2) {return;}for(int i = 0; i < nums.length - 1; i++) {int minIndex = i;for(int j = i + 1; j < nums.length; j++) {if (nums[i] > nums[j]) {minIndex = nums[j] < nums[minIndex] ? j : minIndex;}}swap(nums, i, minIndex);}
}

Python

def selection_sort(list2):for i in range(0, len (list2)-1):min_ = ifor j in range(i + 1, len(list2)):if list2[j] < list2[min_]:min_ = jlist2[i], list2[min_] = list2[min_], list2[i]  # swap

排序——选择排序(Selection sort)相关推荐

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

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

  2. c语言用sort函数选择排序,简单选择排序(Simple Selection Sort)的C语言实现

    简单选择排序(Simple Selection Sort)的核心思想是每次选择无序序列最小的数放在有序序列最后 演示实例: C语言实现(编译器Dev-c++5.4.0,源代码后缀.cpp) 原创文章, ...

  3. 选择排序—简单选择排序(Simple Selection Sort)

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

  4. 七种排序------简单选择排序(Simple Selection Sort)

    简单选择排序法就是通过 n - i 次关键字间的比较,从 n - i + 1个记录中选出关键字最小的记录,并和第 i 个记录交换. 代码如下: void SelectSort(SqList *L) { ...

  5. 算法——排序——选择排序图解动画

    选择排序 简介 代码示例 排序过程 时间复杂度 最差时间复杂度&平均时间复杂度 最优时间复杂度 空间复杂度 稳定性 简介 选择排序(Selection Sort),它的工作原理是:第一次从待排 ...

  6. 简单排序--选择排序

    选择排序: public void sort(){int out,in,min;for(out=0;out<nElements-1;out++){min = out;for(in=out+1;i ...

  7. 【Java】5大排序算法总结(插入排序+希尔排序+选择排序+堆排序+冒泡排序)

    快速导航: 1. 稳定性 2 . 插入排序 3. 希尔排序 4. 选择排序 5. 堆排序 6 冒泡排序 1. 稳定性 两个相等的数据,如果经过排序后,排序算法能保证其相对位置不发生变化,则我们称该算法 ...

  8. c语言单链表的字母排序,链表排序——选择排序法(纯C语言版)

    /********************************* 链表的排序 *******************************************/ /* =========== ...

  9. 看动画学算法之:排序-选择排序

    文章目录 简介 选择排序的例子 选择排序的java代码实现 选择排序的第二种java实现 选择排序的时间复杂度 简介 选择排序就是从数组中选择出来最大或者最小的元素,然后将其和队首或者队尾的元素进行交 ...

最新文章

  1. 基于对应点的6D姿态识别
  2. 大疆精灵2v+怎么连接手机_车载蓝牙播放器怎么用,手机蓝牙怎么连接车载蓝牙放音乐...
  3. 长文 | 腾讯提出 AI For FEW 构想,呼吁人工智能为地球思考
  4. [转]字符编码,ansi, unicode,utf-8, utf-16
  5. idea输入法候选区不跟随光标
  6. 爬虫文档学习 xpath bs4 selenium scrapy...
  7. android 项目将csv文件写入sqlite数据库 代码,如何将csv文件大容量插入sqlite c#
  8. 解决TortoiseGit文件夹和文件状态图标不显示问题
  9. 常见物质相对介电常数(室温,频率低于1kHz)
  10. VBScript详解(一)
  11. 计算机组成原理保姆级复习资料
  12. 洛谷p2298 bfs
  13. SpringBoot中@Value读取不到值的解决方案
  14. 数据库连接池种类、C3P0数据库连接池、德鲁伊数据库连接池
  15. OpenGL之glut、glfw、glew、glad等库之间的关系
  16. FLiText: A Faster and Lighter Semi-Supervised Text Classification with Convolution Networks
  17. 回滚 rollback
  18. 万字干货!核心用户获取和运营策略
  19. 人大计算机跨考,2018考研心得:计算机专业跨考人大经济学全攻略.doc
  20. (附源码)springboot学生社团信息管理 毕业设计 011238

热门文章

  1. android hsl 颜色控件,使用 Palette API 选择颜色
  2. java本金_本金利息自动计算问题
  3. livox_loam试跑与livox_mid40使用
  4. 为自己的不当行为致歉
  5. BSN季度版本2022年4月30日迭代更新预告
  6. python爬虫实现下载电影天堂电影
  7. Python参数传递:值传递和引用传递
  8. 软件测试各阶段测试方法
  9. 一种基于深度卷积神经网络(DCNN)用于于头发和面部皮肤实时分割方法
  10. Attention Model(注意力模型)学习大全