当前位置: 首页 > news >正文

排序算法-选择排序法(SelectionSort)

 排序算法-选择排序法(SelectionSort)

1、说明

选择排序法也是枚举法的应用,就是反复从未排序的数列中取出最小的元素,加入另一个数列中,最后的结果即为已排序的数列。选择排序法可使用两种方式排序,即在所有的数据中,若从小到大排序,则将最大值放入第一个位置;若从小到大排序,则将最大值放入最后一个位置。例如,一开始在所有的数据中挑选一个最小项放在第一个位置(假设是从小到大排序),再从第二项开始挑选一个最小项放在第2个位置,以此重复,直到完成排序位置。

2、算法分析

  1. 无论是最坏情况、最好情况还是平均情况都需要找到最大值(或最小值),因此其比较次数为:(n-1)+(n-2)+(n-3)+...+3+2+1=\frac{n(n-1)}{2}次,时间复杂度为O(n^{2})
  2. 由于选择排序是以最大值或最小值直接与最前方未排序的键值交换,数据排序顺序很有可能被改变,因此它不是稳定排序。
  3. 因此只需一个额外的空间,所以空间复杂度为最佳。
  4. 比较适用于数据量小或有部分数据已经过排序的情况。

3、C++代码 

#include<iostream>
using namespace std;int main() {int data[6] = { 9,7,5,3,4,6 };cout << "原始数据:" << endl;for (int i = 0; i < 6; i++) {cout << data[i] << "  ";}cout << endl;//第1次排序结果://3  9  7  5  4  6//第2次排序结果://3  4  9  7  5  6//第3次排序结果://3  4  5  9  7  6//第4次排序结果://3  4  5  6  9  7//第5次排序结果://3  4  5  6  7  9for (int i = 0; i < 5; i++) {for (int j = i + 1; j < 6; j++) {//data[i] < data[j]	从大到小排序的条件//data[i] > data[j]	从小到大排序的条件if (data[i] > data[j]) {	int temp = 0;temp = data[i];data[i] = data[j];data[j] = temp;}}}cout << "最终数据:" << endl;for (int i = 0; i < 6; i++) {cout << data[i] << "  ";}cout << endl;return 0;
}

输出结果 

http://www.lryc.cn/news/189356.html

相关文章:

  • Java-集合框架
  • 联想携中国移动打造车路协同方案 助力重庆实现32类车联网场景
  • Rust入门基础
  • 民族民俗景区3d智慧旅游系统提升游客旅游体验和质量
  • Webpack 解决:Error: error:0308010C:digital envelope routines::unsupported 的问题
  • JAVA操作Json的ObjectMapper类
  • Docker--harbor
  • Flink中的时间和窗口
  • Ultra-Fast-Lane-Detection 车道线学习资料整理
  • 【Ubuntu】Ubuntu18.04终端卡顿问题
  • k8s强制删除pod、svc、namespace(Terminating)
  • froeach迭代删除和List迭代删除问题
  • chromedriver下载地址
  • 2ED2410-EM:12v / 24v智能模拟高侧MOSFET栅极驱动器
  • 什么是Fetch API?与传统的AJAX相比,有什么优势?
  • 43.241.18.123哪些问题会导致服务器里面时间错误
  • 【ElasticSearch】更新es索引生命周期策略,策略何时对索引生效
  • 卫星/RedCap/高算力/解决方案/创新金奖……移远通信为IOTE 2023再添新活力
  • N9030B是德科技信号分析仪
  • Mysql索引原理
  • apifox的使用以及和idea集成
  • css:过渡transition 、转换transform、动画animation
  • 双边滤波算法及例程
  • 排序算法-希尔排序法(ShellSort)
  • 交通物流模型 | 基于自适应图卷积网络的轨道交通短时客流预测
  • 2.1python 常用的三种数据类型_python量化实用版教程(初级)
  • C++游戏后端开发(魔兽世界,MMO,TrinityCore源码拆解) 教程
  • MySQL 之 死锁日志的查看和分析
  • Docker运行docker中指定一个jar
  • nodejs+vue家教管理系统