排序——选择排序(Selection sort)
算法思想
第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。
图示过程
假设一个数列为{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)相关推荐
- [转载] python选择排序二元选择_选择排序:简单选择排序(Simple Selection Sort)
参考链接: Python中选择排序Selection Sort 基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的 ...
- c语言用sort函数选择排序,简单选择排序(Simple Selection Sort)的C语言实现
简单选择排序(Simple Selection Sort)的核心思想是每次选择无序序列最小的数放在有序序列最后 演示实例: C语言实现(编译器Dev-c++5.4.0,源代码后缀.cpp) 原创文章, ...
- 选择排序—简单选择排序(Simple Selection Sort)
基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素 ...
- 七种排序------简单选择排序(Simple Selection Sort)
简单选择排序法就是通过 n - i 次关键字间的比较,从 n - i + 1个记录中选出关键字最小的记录,并和第 i 个记录交换. 代码如下: void SelectSort(SqList *L) { ...
- 算法——排序——选择排序图解动画
选择排序 简介 代码示例 排序过程 时间复杂度 最差时间复杂度&平均时间复杂度 最优时间复杂度 空间复杂度 稳定性 简介 选择排序(Selection Sort),它的工作原理是:第一次从待排 ...
- 简单排序--选择排序
选择排序: public void sort(){int out,in,min;for(out=0;out<nElements-1;out++){min = out;for(in=out+1;i ...
- 【Java】5大排序算法总结(插入排序+希尔排序+选择排序+堆排序+冒泡排序)
快速导航: 1. 稳定性 2 . 插入排序 3. 希尔排序 4. 选择排序 5. 堆排序 6 冒泡排序 1. 稳定性 两个相等的数据,如果经过排序后,排序算法能保证其相对位置不发生变化,则我们称该算法 ...
- c语言单链表的字母排序,链表排序——选择排序法(纯C语言版)
/********************************* 链表的排序 *******************************************/ /* =========== ...
- 看动画学算法之:排序-选择排序
文章目录 简介 选择排序的例子 选择排序的java代码实现 选择排序的第二种java实现 选择排序的时间复杂度 简介 选择排序就是从数组中选择出来最大或者最小的元素,然后将其和队首或者队尾的元素进行交 ...
最新文章
- 基于对应点的6D姿态识别
- 大疆精灵2v+怎么连接手机_车载蓝牙播放器怎么用,手机蓝牙怎么连接车载蓝牙放音乐...
- 长文 | 腾讯提出 AI For FEW 构想,呼吁人工智能为地球思考
- [转]字符编码,ansi, unicode,utf-8, utf-16
- idea输入法候选区不跟随光标
- 爬虫文档学习 xpath bs4 selenium scrapy...
- android 项目将csv文件写入sqlite数据库 代码,如何将csv文件大容量插入sqlite c#
- 解决TortoiseGit文件夹和文件状态图标不显示问题
- 常见物质相对介电常数(室温,频率低于1kHz)
- VBScript详解(一)
- 计算机组成原理保姆级复习资料
- 洛谷p2298 bfs
- SpringBoot中@Value读取不到值的解决方案
- 数据库连接池种类、C3P0数据库连接池、德鲁伊数据库连接池
- OpenGL之glut、glfw、glew、glad等库之间的关系
- FLiText: A Faster and Lighter Semi-Supervised Text Classification with Convolution Networks
- 回滚 rollback
- 万字干货!核心用户获取和运营策略
- 人大计算机跨考,2018考研心得:计算机专业跨考人大经济学全攻略.doc
- (附源码)springboot学生社团信息管理 毕业设计 011238