C++算法之选择排序


文章目录

  • C++算法之选择排序
  • 一、选择排序
  • 二、题目
    • 1、明明的随机数
    • 2、代码
  • 三、复杂度分析

一、选择排序

选择排序(Selection Sort)是我们学习的第一个排序算法。这里,我们尝试按照选择排序的思路,自己将其设计出来。首先,我们来思考一个问题:想把一个完全无序的序列按照从小到大排序,排在第一个的元素应该是谁?

这个问题的答案很简单:就是整个序列中的最小值!

那么,假如我们把最小的元素选择出来,放在答案序列的第一位。那么,后面要解决的问题,就只需要将剩下的n-1个元素排序放在答案的2~n位置即可。

若想排序剩下的n-1个元素,我们也可以用同样的思路:排在剩下元素第一位的一定是剩下元素的最小值!所以我们再求出剩下n-1个元素的最小值,然后放在答案序列的第二位。

所以,按照同样的流程,我们最终就能得出n个元素的排序。

二、题目

1、明明的随机数

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N11000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

输入描述:每组输入有2行,第1行为1个正整数,表示所生成的随机数的个数N,第2行有N个用空格隔开的正整数,为所产生的随机数。

输出描述:每组输出也是2行,第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

2、代码

代码如下(示例):

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 110
using namespace std;
int a[N], n, cnt;int main() {scanf("%d", &n);for (int i = 0; i < n; ++i) scanf("%d", &a[i]);for (int i = 0; i < n; ++i) {int min_pos = i;for (int j = i + 1; j < n; ++j) {if (a[j] < a[min_pos])min_pos = j;}swap(a[i], a[min_pos]);}cnt = 0;for (int i = 0; i < n; ++i) if (i == 0 || a[i] != a[i - 1]) a[cnt++] = a[i];printf("%d\n", cnt);for (int i = 0; i < cnt; ++i) printf("%d ", a[i]); return 0;
}

三、复杂度分析

选择排序的时间复杂度是:O(n^2)

C++算法之选择排序相关推荐

  1. 数据结构与算法:选择排序

    数据结构与算法:选择排序 雪柯 大工生物信息 提笔为写给奋进之人 已关注 8 人赞同了该文章 引用自算法图解,作者[美] Aditya Bhargava 译袁国忠 特别备注:本书非原创,但部分内容自己 ...

  2. 排序---初级排序算法(选择排序、插入排序和希尔排序)

    写在前面的话: 一枚自学Java和算法的工科妹子. 算法学习书目:算法(第四版) Robert Sedgewick 算法视频教程:Coursera  Algorithms Part1&2 本文 ...

  3. 函数模板案例_利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序 排序规则从大到小,排序算法为选择排序 分别利用char数组和int数组进行测试

    案例描述: 利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序 排序规则从大到小,排序算法为选择排序 分别利用char数组和int数组进行测试 #include <iostream& ...

  4. 排序算法 | 直接选择排序,算法的图解、实现、复杂度和稳定性分析

    排序算法 | 直接选择排序,算法的图解.实现.复杂度和稳定性分析 目录 1.直接选择排序的原理 2.图解直接选择排序 3.算法代码实现 4.算法复杂度分析.稳定性分析 直接选择排序 1.直接选择排序的 ...

  5. 数据结构与算法之选择排序

    数据结构与算法之选择排序 目录 基本介绍 选择排序思想 代码实现 1. 基本介绍 选择排序也属于内部排序法,是从排序的数据中,按指定的规则选出某一元素,再依次交换位置后达到排序的目的 2. 选择排序思 ...

  6. 堆排序算法c语言筛选法,【排序】排序算法之选择排序

    排序算法之选择排序 罗朝辉(http://www.cppblog.com/kesalin) 转载请注明出处 排序是数据处理中经常使用的一种重要运算,在计算机及其应用系统中,花费在排序上的时间在系统运行 ...

  7. 【排序算法】选择排序(Selection sort)

    选择排序(Selection sort)是一种简单直观的排序算法. 选择排序介绍 它的基本思想是: 首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置:接着,再从剩余未排序的元 ...

  8. 排序算法(3)选择排序

    排序算法(3)选择排序 原理:思想:两个变种(1)单侧选择:在一个无序数组中选择出每一轮中最大值(或最小值)元素,放到最前面或最后面(升序)(2)双向选择:在一个无序数组中选择出每一轮中最值元素,然后 ...

  9. 冒泡排序算法和选择排序算法比较

      冒泡排序算法详细内容见→冒泡排序算法.   选择排序算法详细内容见→选择排序算法.   冒泡排序算法和选择排序算法的区别: 冒泡排序是比较相邻位置的两个数:而选择排序是按顺序比较,找出最大值或者最 ...

最新文章

  1. 类脑量子叠加脉冲神经网络:从量子大脑假说到更好的人工智能
  2. python装饰器setter_第7.27节 Python案例详解: @property装饰器定义属性访问方法getter、setter、deleter...
  3. extjs 表单设置html5,ExtJS 配置和表格控件使用
  4. linux下简单的备份的脚本 2 【转】
  5. 五个问答,告诉你阿里云对象存储如何助力钉钉战胜业务洪峰
  6. int和Integer的比较
  7. android 部分文字加粗,2013.04.08——— android 关于部分文字加粗的有关问题
  8. matlab中的 complete,Complete-collection-of-algorithm
  9. Python学习(三)-----用户输入和while循环
  10. linux命令行添加管理员用户,Linux基础命令---添加用户useradd
  11. bccomp php扩展,PHP 中文工具包 ChineseUtil v2.0 发布,引入 FFI 提升性能节省内存
  12. 采集本地HTML数据,火车采集器保存为本地word、excel、html、txt文件方法及文件模板_爬虫软件技术与爬虫软件网页数据采集器门户...
  13. sql内外连接的区别
  14. ​社交产品盈利方式产品模式设计案例
  15. Proxmox集群网络配置
  16. 极光推送的简单实现方法
  17. 基于双目视觉的非标机械臂的空间定位流程(未完待续)
  18. 树莓派4b使用vncview连接报错:Cannot currently show the desktop
  19. python的tesseract库几个重要的命令
  20. uva 220 趣味黑白棋 精简代码

热门文章

  1. ALM算法(增广拉格朗日法)
  2. 带滤波器的PID控制仿真-3(Simulink仿真)
  3. 学习记录 重叠网络权威知识——多尺度复杂网络社区发现的链接
  4. pandas中的滚动窗口rolling函数和扩展窗口expanding函数
  5. 硬件中断和软件中断的区别?
  6. WifiManager自动连接wifi接入点
  7. 初识马尔可夫和马尔可夫链
  8. cie规定的标准光源_标准光源概述_相关术语_所需条件-维库电子通
  9. Camera 冷启动阶段分解
  10. Anaconda安装+使用