经典排序算法-----选择排序(C语言实现)
算法表述:
选择排序的基本原理是以序列首元素位置为基准位置,每次将该基准位置的元素和后面元素逐个进行比较,挑选最大或者最小的那个数放在基准位置上,一趟比较结束后,然后将基准位置设置为该位置的下一位置,重复上述操作,直到基准被安排在序列的最后有一个位置时,此时序列已经排列完成。
算法执行过程分析:
例如:88、5、15、56、32、18、69
说明:按照从小到大的顺序进行排序,其中每条彩色线条为两数之间的比较,其条数为比较次数.图示为比较结果,过程较为简单,请读者自行分析.
(1)第一躺比较:
此时最小数5已经放在最开始的位置。
(2)第二趟比较:
此时将第二小的数字放在当前序列的开头
(3)第三趟排序:
此时将第三小的数字放在当前序列的开头
以此类推,可得到最终结果为:5、15、18、32、56、69、88
代码实现:
void Select_Sort(int *arr,int len)
{int small = 0;for (int i = 0; i < len - 1; i++) {small = i;int j = i + 1;for (; j < len; j++) {if (arr[j] < arr[small]) {small = j;}}int temp = arr[i];arr[i] = arr[small];arr[small] = temp;}
}
总结:
通过计算选择排序算法的时间复杂度为O(n^2),由于借助了辅助空间temp,故其空间复杂度为O(1)。选择排序算法是一种不稳定的排序算法。
经典排序算法-----选择排序(C语言实现)相关推荐
- C语言基础排序算法-选择排序
C语言基础排序算法-选择排序 什么是选择排序? 选择排序(Selection sort)是一种简单直观的排序算法,第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从 ...
- C语言排序算法 选择排序 插入排序 快速排序 qsort实现快排 堆排序
常见排序算法 选择排序 选择排序(Selection sort)是一种简单直观的排序算法. 它的工作原理如下. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素 ...
- 十大经典排序算法-选择排序算法详解
十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...
- Java排序算法——选择排序
Java排序算法--选择排序(Selection sort) 传送门 冒泡排序 插入排序 简述 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找 ...
- python排序算法-选择排序
python排序算法-选择排序 一.选择排序 1.一趟排序纪录最小的数,放在第一个位置 2.再一次排序记录列表无序区最小的数,放在第二个位置 关键 有序区.无序区.无序区最小数的位置 代码 def s ...
- 排序算法-选择排序-堆排序
排序算法-选择排序-堆排序 堆排序是一种树型选择排序方法.在排序过程中,将 L [ 1... n ] L[1 ... n] L[1...n]看成是一棵完全二叉树的顺序存储结构,利用完全二叉树中双亲结点 ...
- 排序算法---选择排序(java版)
简单选择排序 原理 选择排序(Selection Sort)的原理有点类似插入排序,也分已排序区间和未排序区间.但是选择排序每次会从排序区间中找到最小的元素,将其放到已排序区间的末尾. 简单选择排序执 ...
- 排序算法--选择排序(Java实现)
选择排序概念 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中 ...
- 排序算法——选择排序法(Select Sorting)
选择排序(Select Sorting) 基本介绍 选择排序也属于内部排序法,是从预排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的 选择排序思想 选择排序(Selec ...
最新文章
- 辩论届人机大战:IBM新AI完胜人类冠军!
- KVM嵌套虚拟化 -- 在虚拟机中创建虚拟机
- JQuery 分割函数(split)的用法和定义
- Git 的工作区、暂存区、版本库—— Git 学习笔记 15
- android 4.0.4 usb调试,安卓手机4.0怎么打开usb调试?图文详解附视频
- js怎么函数怎么给另一个函数传值并且不调用_2020年最火爆的Vue.js面试题
- rails 开发随手记 9
- 多个需要验证的输入框思路问题
- redis数据库实例
- 开发工具-压力测试工具 ab
- 支付接口申请_微信小程序商城如何开通支付功能
- md 生成目录 码云_码云搭建博客
- win7左上角白杠一直闪_win10换win7
- RabbitMQ入门中篇
- Smart3D系列教程6之 《案例实战演练3——倾斜数据正射影像及DSM的生产》
- pycharm遇坑指南(win32gui)
- php使用ElasticSearch
- 如何搭建简易又安全的企业内部文件服务器?
- 【Steam VR 2.0】3. Skeleton Poser 自定义抓取手势的使用
- 数字电路要点总结-TTL电路分析
热门文章
- moment.js 搜索栏获取最近一周,一个月,三个月,半年,一年时间
- C++ 控制台程序,窗口程序,静态库,动态库的区别
- 安森美推出超快恢复二极管 整流器SURS8320T3G 3A200V 广泛应用于各种高频逆变器件
- 《一天攻破K60》笔记(使用山外库5.3版本)
- Ansible-playbook的使用
- 详解 3dmax SDK 环境搭建与QT配置
- ios修改apn的插件_GitHub - SuPair/APN: [已废弃]适合 iOS 7 的 APN 设置工具,又一个没过审核的周末项目...
- 关于iOS系统中通讯录的访问
- Linux入门:tar、gzip、bzip2以及zip的区别
- 机票退订c语言程序,c语言程序设计告飞机票预订系统.doc