排序算法 | 简单选择排序,算法的图解、实现、复杂度和稳定性分析
- 今天讲解一下简单选择排序的原理以及实现、复杂度和稳定性分析
- 这个内容很简单,轻松加愉快,很快就过了~
目录
- 简单选择排序
- 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的相对次序已发生变化。
因此,简单选择排序是不稳定排序
排序算法 | 简单选择排序,算法的图解、实现、复杂度和稳定性分析相关推荐
- 排序算法之选择排序(简单选择排序、堆排序)
选择排序(简单选择排序.堆排序) 选择排序 简单选择排序 概念 算法实现 堆排序 概念 算法实现 后续 选择排序 选择排序的基本思想是:每一趟在待排序元素中选取关键字最小(或最大)的元素加入有序子序列 ...
- java中的排序算法——简单选择排序,树形选择排序与堆排序(一)
package com.sort; /** * 选择排序: * 简单选择排序,树形选择排序与堆排序 * */ public class SelecSortDemo { /** * ----- ...
- 排序算法——简单选择排序(PythonJava)
基本思想 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素( ...
- 数据结构排序算法——选择排序(简单选择排序)
简单选择排序(Simple Selection Sort) 一.算法基本思想: 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放 ...
- 排序算法-简单选择排序
文章目录 1.基本介绍 2.选择排序的思想 3.选择排序思路分析图 4.代码实现 1.基本介绍 选择排序属于内部排序算法,是从预排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的 ...
- 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现)
转载:http://blog.csdn.net/pzhtpf/article/details/7559943 3.简单选择排序 (1)基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换 ...
- 直接插入排序,折半插入排序,希尔排序,简单选择排序,冒泡排序,快速排序模板以及比较次数与移动次数的分析,折半搜索算法模板
#include<stdio.h> #include<time.h> #include <stdlib.h>const int maxx=1e2+1; int a[ ...
- 选择排序:简单选择排序
1. 选择排序思想 (1.1)选择排序的基本思想是:每一趟(例如第i趟)在后面n-i+1(i=1,2, ... , n)个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到第n-1趟做 ...
- [转载] python选择排序二元选择_选择排序:简单选择排序(Simple Selection Sort)
参考链接: Python中选择排序Selection Sort 基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的 ...
最新文章
- scp 命令 路径_基于SSH的文件传输:scp命令
- WRF,WPS,WRF-Chem安装及编译步骤及bug总结(2)
- day02 pycharm 安装
- Linux下查看/管理当前登录用户及用户操作历史记录
- NSStringUIImage~NSData的相互转换以及中文转码
- go语言解析html
- ubuntu E470无线网卡驱动
- C语言中变量名加括号,为什么在声明变量时C ++允许我们在括号内将变量名括起来?...
- 22.哈希表(HashTable)
- LOIC低轨道离子拒绝服务攻击
- AHP(层次分析法)的全面讲解及python实现
- CefSharp入门-winform
- Composer 的常用命令
- Guava学习之Map
- vm打开虚拟机提示“未能启动虚拟机“解决方案
- XML解析(DOM方式)
- 悲观锁、乐观锁、自旋锁和读写锁
- folx pro 激活码使用安装下载教程(mac优秀下载工具)
- 【论文阅读】Entity Structure Within and Throughout: Modeling Mention Dependencies for Document-Level Relat
- 从头说起:基金采取券商结算模式的依据和影响