C++算法之选择排序
C++算法之选择排序
文章目录
- C++算法之选择排序
- 一、选择排序
- 二、题目
- 1、明明的随机数
- 2、代码
- 三、复杂度分析
一、选择排序
选择排序(Selection Sort)
是我们学习的第一个排序算法。这里,我们尝试按照选择排序的思路,自己将其设计出来。首先,我们来思考一个问题:想把一个完全无序的序列按照从小到大排序,排在第一个的元素应该是谁?
这个问题的答案很简单:就是整个序列中的最小值!
那么,假如我们把最小的元素选择出来,放在答案序列的第一位。那么,后面要解决的问题,就只需要将剩下的n-1
个元素排序放在答案的2~n
位置即可。
若想排序剩下的n-1
个元素,我们也可以用同样的思路:排在剩下元素第一位的一定是剩下元素的最小值!所以我们再求出剩下n-1
个元素的最小值,然后放在答案序列的第二位。
所以,按照同样的流程,我们最终就能得出n
个元素的排序。
二、题目
1、明明的随机数
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N
个1
到1000
之间的随机整数(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++算法之选择排序相关推荐
- 数据结构与算法:选择排序
数据结构与算法:选择排序 雪柯 大工生物信息 提笔为写给奋进之人 已关注 8 人赞同了该文章 引用自算法图解,作者[美] Aditya Bhargava 译袁国忠 特别备注:本书非原创,但部分内容自己 ...
- 排序---初级排序算法(选择排序、插入排序和希尔排序)
写在前面的话: 一枚自学Java和算法的工科妹子. 算法学习书目:算法(第四版) Robert Sedgewick 算法视频教程:Coursera Algorithms Part1&2 本文 ...
- 函数模板案例_利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序 排序规则从大到小,排序算法为选择排序 分别利用char数组和int数组进行测试
案例描述: 利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序 排序规则从大到小,排序算法为选择排序 分别利用char数组和int数组进行测试 #include <iostream& ...
- 排序算法 | 直接选择排序,算法的图解、实现、复杂度和稳定性分析
排序算法 | 直接选择排序,算法的图解.实现.复杂度和稳定性分析 目录 1.直接选择排序的原理 2.图解直接选择排序 3.算法代码实现 4.算法复杂度分析.稳定性分析 直接选择排序 1.直接选择排序的 ...
- 数据结构与算法之选择排序
数据结构与算法之选择排序 目录 基本介绍 选择排序思想 代码实现 1. 基本介绍 选择排序也属于内部排序法,是从排序的数据中,按指定的规则选出某一元素,再依次交换位置后达到排序的目的 2. 选择排序思 ...
- 堆排序算法c语言筛选法,【排序】排序算法之选择排序
排序算法之选择排序 罗朝辉(http://www.cppblog.com/kesalin) 转载请注明出处 排序是数据处理中经常使用的一种重要运算,在计算机及其应用系统中,花费在排序上的时间在系统运行 ...
- 【排序算法】选择排序(Selection sort)
选择排序(Selection sort)是一种简单直观的排序算法. 选择排序介绍 它的基本思想是: 首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置:接着,再从剩余未排序的元 ...
- 排序算法(3)选择排序
排序算法(3)选择排序 原理:思想:两个变种(1)单侧选择:在一个无序数组中选择出每一轮中最大值(或最小值)元素,放到最前面或最后面(升序)(2)双向选择:在一个无序数组中选择出每一轮中最值元素,然后 ...
- 冒泡排序算法和选择排序算法比较
冒泡排序算法详细内容见→冒泡排序算法. 选择排序算法详细内容见→选择排序算法. 冒泡排序算法和选择排序算法的区别: 冒泡排序是比较相邻位置的两个数:而选择排序是按顺序比较,找出最大值或者最 ...
最新文章
- 类脑量子叠加脉冲神经网络:从量子大脑假说到更好的人工智能
- python装饰器setter_第7.27节 Python案例详解: @property装饰器定义属性访问方法getter、setter、deleter...
- extjs 表单设置html5,ExtJS 配置和表格控件使用
- linux下简单的备份的脚本 2 【转】
- 五个问答,告诉你阿里云对象存储如何助力钉钉战胜业务洪峰
- int和Integer的比较
- android 部分文字加粗,2013.04.08——— android 关于部分文字加粗的有关问题
- matlab中的 complete,Complete-collection-of-algorithm
- Python学习(三)-----用户输入和while循环
- linux命令行添加管理员用户,Linux基础命令---添加用户useradd
- bccomp php扩展,PHP 中文工具包 ChineseUtil v2.0 发布,引入 FFI 提升性能节省内存
- 采集本地HTML数据,火车采集器保存为本地word、excel、html、txt文件方法及文件模板_爬虫软件技术与爬虫软件网页数据采集器门户...
- sql内外连接的区别
- ​社交产品盈利方式产品模式设计案例
- Proxmox集群网络配置
- 极光推送的简单实现方法
- 基于双目视觉的非标机械臂的空间定位流程(未完待续)
- 树莓派4b使用vncview连接报错:Cannot currently show the desktop
- python的tesseract库几个重要的命令
- uva 220 趣味黑白棋 精简代码