基本思想

每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在待排序的数列最前,直到全部待排序的数据元素排完。

具体步骤

1.读入数据存放在a数组中。

2.在a[1]~a[n]中选择值最小的元素,与第1位置元素交换,则把最小值元素放入a[1]中。

3.在a[2]~a[n]中选择值最小的元素,与第2位置元素交换,则把最小值元素放入a[2]中,……

4.直到n-1个元素与第n个元素比较排序为止。

实现方法

程序用两层循环完成算法,外层循环i控制当前序列最小值存放的数组位置,内层循环j控制从i+1到n序列中选择最小的元素所在位置k。

程序代码

#include <iostream>
using namespace std;
int  main ()
{int n,temp,array[1000];cin>>n;array[0]=n;for (int i = 1; i <= n ; ++i){cin>>array[i];}for (int i = 1; i <= n; ++i){for (int j = i+1; j <= n; ++j){if(array[j]<array[i]){temp=array[i];array[i]=array[j];array[j]=temp;}}}for (int k = 1; k <= n; ++k){cout<<array[k]<<' ';}return 0;
}

测试

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <ctime>
using namespace std;
int  main ()
{int n,temp,array[1000];
//  cin>>n;
//  array[0]=n;
//    for (int i = 1; i <= n ; ++i)
//    {//        cin>>array[i];
//    }n=1000;srand(time(NULL));for (int i=1;i<=n;i++)array[i]=rand()%10000;for (int i = 1; i <= n; ++i){for (int j = i+1; j <= n; ++j){if(array[j]<array[i]){temp=array[i];array[i]=array[j];array[j]=temp;}}}for (int k = 1; k <= n; ++k){cout<<array[k]<<' ';}cout<<endl;printf("Time used = %.7lf",(double)clock()/CLOCKS_PER_SEC);return 0;
}

算法分析

时间复杂度

选择排序的交换操作介于 0 和 (n - 1) 次之间。

选择排序的比较操作为 (n-1)+(n-2)+……+3+2+1+0=n (n - 1) / 2 次之间。

选择排序的赋值操作介于 0 和 3 (n - 1) 次之间。

比较次数O(n2),比较次数与关键字的初始状态无关,
总的比较次数N=(n-1)+(n-2)+…+1=n*(n-1)/2。

交换次数O(n),最好情况是,已经有序,交换0次;最坏情况交换n-1次,逆序交换n/2次。

交换次数比冒泡排序少多了,由于交换所需CPU时间比比较所需的CPU时间多,n值较小时,选择排序比冒泡排序快。

稳定性

选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。

那么,在一趟选择,如果一个元素比当前元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。

比较拗口,举个例子,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中两个5的相对前后顺序就被破坏了,所以选择排序是一个不稳定的排序算法。

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

  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. 从前端角度来看网页设计
  2. c++中文件应用的一点小变化
  3. python映射类型包括哪三种_python新手入门必备——映射类型相关函数
  4. PHP预防XSS攻击,ajax跨域攻击的方法
  5. 由歌词引发的模式思考之下篇(模拟Spring的BeanFactory)
  6. PHP mongodb运用,MongoDB在PHP下的应用学习笔记
  7. 一个网卡绑定多个IP
  8. Xor Sum(AtCoder-2272)
  9. mybatis中refid是什么意思
  10. BrnShop开源网上商城第一讲:架构设计
  11. 常用头文件的可调用函数的归类笔记
  12. matlab 液压,基于MATLAB液压系统设计与仿真.doc
  13. 推荐一款特别厉害的在线工具,程序员的百宝箱
  14. TensorFlow2.0 Guide官方教程 学习笔记20 -‘Effective TensorFlow 2‘
  15. VMWare虚拟机下载|最新版|破解版
  16. ERP打印入库单(四十)
  17. Linux内核驱动开发-USB热插拔信息调取
  18. 优质的器材设备3d模型素材推荐,不容错过
  19. 微信小程序组件movable-area事件穿透,事件冒泡,movable-area遮盖/遮挡住其他元素之后点击事件不穿透/不冒泡解决办法
  20. 极米4K激光电视新品:一杯敬坚果, 一杯敬百度

热门文章

  1. 一些有趣的三方开源库
  2. struts 权限控制
  3. 在控制台读取用户输入密码,你会么?
  4. oracle11 for download official
  5. android 声音,同时播放声音Android
  6. java byte(字节_【原创】Java中Byte字节流处理的自定义方法库2
  7. java jms clust,Geoserver 的 JMS Cluster modules(集群数据同步)
  8. rs232读取智能电表_老王说表之--快速查看家里电表读数的方法
  9. python中的idle在哪里_python idle 的打开方式
  10. idea git 过滤target_IDEA + maven 零基础构建 java agent 项目