一、介绍

选择排序(Selection sort)是一种简单直观的排序算法。
它的基本思想是:首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置;接着,再从剩余未排序的元素中继续寻找最小(or最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

二、图文说明

下面以数列{20,40,30,10,60,50}为例,演示它的选择排序过程(如下图)。

排序流程

第1趟:i=0。找出a[1...5]中的最小值a[3]=10,然后将a[0]和a[3]互换。 数列变化:20,40,30,10,60,50 -- > 10,40,30,20,60,50
第2趟:i=1。找出a[2...5]中的最小值a[3]=20,然后将a[1]和a[3]互换。 数列变化:10,40,30,20,60,50 -- > 10,20,30,40,60,50
第3趟:i=2。找出a[3...5]中的最小值,由于该最小值大于a[2],该趟不做任何处理。 
第4趟:i=3。找出a[4...5]中的最小值,由于该最小值大于a[3],该趟不做任何处理。 
第5趟:i=4。交换a[4]和a[5]的数据。 数列变化:10,20,30,40,60,50 -- > 10,20,30,40,50,60

三、时间复杂度和稳定性

选择排序时间复杂度
选择排序的时间复杂度是O(N2)。
假设被排序的数列中有N个数。遍历一趟的时间复杂度是O(N),需要遍历多少次呢?N-1!因此,选择排序的时间复杂度是O(N2)。

选择排序稳定性
选择排序是稳定的算法,它满足稳定算法的定义。
算法稳定性 -- 假设在数列中存在a[i]=a[j],若在排序之前,a[i]在a[j]前面;并且排序之后,a[i]仍然在a[j]前面。则这个排序算法是稳定的!

四、代码

/*** 选择排序:C++** @author skywang* @date 2014/03/11*/#include <iostream>
using namespace std;/** 选择排序** 参数说明:*     a -- 待排序的数组*     n -- 数组的长度*/
void selectSort(int* a, int n)
{int i;        // 有序区的末尾位置int j;        // 无序区的起始位置int min;    // 无序区中最小元素位置for(i=0; i<n; i++){min=i;// 找出"a[i+1] ... a[n]"之间的最小元素,并赋值给min。for(j=i+1; j<n; j++){if(a[j] < a[min])min=j;}// 若min!=i,则交换 a[i] 和 a[min]。// 交换之后,保证了a[0] ... a[i] 之间的元素是有序的。if(min != i){int tmp = a[i];a[i] = a[min];a[min] = tmp;}}
}int main()
{int i;int a[] = {20,40,30,10,60,50};int ilen = (sizeof(a)) / (sizeof(a[0]));cout << "before sort:";for (i=0; i<ilen; i++)cout << a[i] << " ";cout << endl;selectSort(a, ilen);cout << "after  sort:";for (i=0; i<ilen; i++)cout << a[i] << " ";cout << endl;return 0;
}

本文来自http://www.cnblogs.com/skywang12345/p/3597641.html

转载于:https://www.cnblogs.com/msymm/p/9758212.html

排序算法——选择排序相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  10. [排序算法] 选择排序(2种)

    1.直接选择排序 [思想]选出剩下的未排序数据中的最小元素与第i个元素交换 [特点]不稳定 空间代价:O(1) 时间代价:O(n^2) 1 void SelectSort(int Array[], i ...

最新文章

  1. 【资源分享】639页《深度学习:Deep Learning》硬核课程PPT
  2. GPS模块输出的NMEA数据ddmm.mmmm转换成dd.ddddd,在google Earth Pro中描点
  3. javascript对下拉列表框(select)的操作
  4. Java ResourceBundle keySet()方法及示例
  5. 南京理工大学计算机学院教师信息网,南京理工大学教师信息
  6. 程序员的搞笑日常:写给1024的程序员们,现在的你们还在加班吗?
  7. Spring Boot 2 Webflux的全局异常处理
  8. 软件工程自学笔记一(基础篇)
  9. 北大AI公开课第十课--人工智能在生命科学中的应用by碳云智能李英睿
  10. Android中实现简单的仿京东详情页面
  11. Windows程式开发设计指南(十七)文字和字体
  12. 什么是SSL协议,浅谈SSL协议。
  13. cannot dynamically load executable的尴尬经历
  14. 如何安装谷歌浏览器驱动(Google Chromedriver)
  15. nodejs 前端生成csv 直接下载记录
  16. 花开花落花非花、缘起缘灭缘随缘
  17. java 侵入性_侵入式列表实现Java?
  18. Unity编辑器Bug----tranform.positon assign attempt for “Scene Camera”is not valid.
  19. Android 中的权限
  20. 盘点那些高考失利却仍然成功在各行各业的人

热门文章

  1. Git和Code Review流程
  2. 软件工程领域权威期刊
  3. 苹果开场铃声 android,‎App Store 上的“手机铃声制作 - 铃声设置助手大全”
  4. ubuntu20.04下编译rovio代码报“undefined reference to ‘__glew***‘“
  5. 利用Linux查找重复文件(shell脚本)
  6. sox处理mp3_ffmpeg sox 音频转换 MP3 转 wav
  7. AAC 音频格式详解
  8. 华东师范大学夏令营复习计划总结
  9. win10光盘刻录linux镜像,使用win10自带的刻录工具制作ISO镜像文件光盘
  10. taobao.trades.sold.get-查询卖家已卖出的交易数据API接口,店铺交易API接口,店铺订单交易API接口,订单详情API接口,r2接口,淘宝oAuth2.0接口