【排序算法】简单选择排序及实例_C语言代码实现_Python代码实现
博客对您有所帮助的话,欢迎给个赞啦,你的鼓励是对我最大的支持! 有不足之处也请您评论指教
简单选择排序
简单选择排序是选择排序的一种。
问:那么什么是选择排序?
答:每趟从待排序的记录中选出关键字最小的元素,顺序放在已排序的记录序列末尾,直到全部排序结束为止。
1 简单选择排序的思想与流程
从上文“什么是选择排序”,引申出简单选择排序的思想;
①从待排序数组元素中,找到值最小的元素;
②将值最小的元素与待排序数组元素的第一个元素互换;
③重复(元素个数-1轮次)①②,至此直到数组元素排序完成。
2 实例介绍
下面将某个实例和图片来介绍简单选择排序的思想和代码;
假设数组为:
arr=[5,2,4,6,1,3]arr=[5, 2, 4, 6, 1, 3]arr=[5,2,4,6,1,3]
注:下方介绍的图片显示颜色为黄就是已经排好的元素,显示为红色就是标记目前值最小的元素,显示为绿色就是正在遍历数组剩下的元素
1.第一轮(如动图1所示)
把未排序数组的第一个元素设为最小值(在本例中,设数组元素 5 为最小值,min=5),然后依次遍历剩下的元素。
①遍历第一个元素为2,2<5,故2设为最小值,min=2;
②遍历第二个元素为4,4>2,继续往后遍历;
③遍历第三个元素为6,6>2,继续往后遍历;
④遍历第四个元素为1,1<2,故1设为最小值,min=1;
⑤遍历第五个元素为3,3>1,继续往后遍历,后面没有元素,故将值最小的元素与待排序数组元素的第一个元素互换,1与5互换,元素1排序完毕,此时数组元素依次为1 2 4 6 5 3.
此时待排序数组依次为 2 4 6 5 3
图1简单选择排序第一轮图1~简单选择排序第一轮图1 简单选择排序第一轮
2.第二轮(如动图2所示)
把未排序数组的第一个元素设为最小值(此时,min=2),然后依次遍历剩下的元素。
①遍历第一个元素为4,4>2,继续往后遍历;
②遍历第二个元素为6,6>2,继续往后遍历;
③遍历第三个元素为5,5>2,继续往后遍历;
④遍历第四个元素为3,3>2,继续往后遍历,后面没有元素,故将值最小的元素与待排序数组元素的第一个元素互换,第一个元素是其本身,故不动,元素2排序完毕,此时数组元素依次为1 2 4 6 5 3.
此时待排序数组依次为 4 6 5 3
图2简单选择排序第二轮图2~简单选择排序第二轮图2 简单选择排序第二轮
3.第三轮(如动图3所示)
把未排序数组的第一个元素设为最小值(此时,min=4),然后依次遍历剩下的元素。
①遍历第一个元素为6,6>4,继续往后遍历;
②遍历第二个元素为5,5>4,继续往后遍历;
③遍历第三个元素为3,3<4,故3设为最小值,min=3,继续往后遍历,后面没有元素,故将值最小的元素与待排序数组元素的第一个元素互换,3与4互换,元素3排序完毕,此时数组元素依次为1 2 3 6 5 4.
此时待排序数组依次为 6 5 4
图3简单选择排序第三轮图3~简单选择排序第三轮图3 简单选择排序第三轮
4.第四轮(如动图4所示)
把未排序数组的第一个元素设为最小值(此时,min=6),然后依次遍历剩下的元素。
①遍历第一个元素为5,6>5,故5设为最小值,min=5;
②遍历第二个元素为4,5>4,故4设为最小值,min=4,继续往后遍历,后面没有元素,故将值最小的元素与待排序数组元素的第一个元素互换,4与6互换,元素4排序完毕,此时数组元素依次为1 2 3 4 5 6.
此时待排序数组依次为 5 6
图4简单选择排序第四轮图4~简单选择排序第四轮图4 简单选择排序第四轮
5.第5轮(如动图5所示)
把未排序数组的第一个元素设为最小值(此时,min=5),然后依次遍历剩下的元素。
①遍历第一个元素为6,5<6,继续往后遍历,后面没有元素,故将值最小的元素与待排序数组元素的第一个元素互换,第一个元素是其本身,故不动,元素5排序完毕,此时数组元素依次为1 2 3 4 5 6.
此时待排序数组依次为 6
图5简单选择排序第五轮图5~简单选择排序第五轮图5 简单选择排序第五轮
最后一个元素不需要排序
此时经过5轮排序,排序完毕。
3 算法分析
3.1 时间复杂度
对于简单选择排序来说,无论初始数组元素是什么状态,其排序趟数永远是(元素个数-1)躺,元素间的比较始终为O(n2)O(n^{2})O(n2),而元素间的移动次数与初始状态有关,但上限为O(n)O(n)O(n);
所以简单选择排序最好、最坏、平均时间复杂度均为O(n2)O(n^{2})O(n2)
3.2 空间复杂度
常数个辅助空间:O(1)O(1)O(1)
3.3 稳定性
不稳定
4 代码实现
4.1 C语言代码
#include<stdio.h>
int main()
{void select_sort(int arr[], int len);int arr[6] = { 5,2,4,6,1,3 };int len=sizeof(arr)/sizeof(int);int i;printf("排序之前的数组元素依次为:");for(i=0;i<len;i++){printf("%d ",arr[i]);}printf("\n"); select_sort(arr,len);printf("排序之后的数组元素依次为:");for(i=0;i<len;i++){printf("%d ",arr[i]);}printf("\n"); return 0;
}
void select_sort(int arr[], int len)
{int i,j;int min;int temp;int k;for(i=0;i<len-1;i++){min = i;for(j=i+1;j<len;j++){if(arr[j]<arr[min]) min = j;}if(min!=i) {temp = arr[i];arr[i] = arr[min];arr[min] = temp;}// 输入排序每轮结果printf("第%d轮",i+1);for(k=0;k<len;k++){printf("%d ",arr[k]);}printf("\n");}
}
运行结果:
图6C语言代码运行结果图6~C语言代码运行结果图6 C语言代码运行结果
4.2 Python语言代码
def simpleselect_sort(List, len):''' Function description: selection sortParameters: List:待排序数组 len:待排序数组长度 return:升序数组Author: kent4ngwAddress: https://blog.csdn.net/t4ngw '''for i in range(len-1):min = ifor j in range(i+1, len):if(List[j] < List[min]):min = jif(min != i):List[i], List[min] = List[min], List[i]return List
List = [5, 2, 4, 6, 1, 3]
print("简单选择排序前的数组:")
print(List)
print("简单选择排序后的数组:")
print(simpleselect_sort(List, len(List)))# 不稳定
运行结果:
图7Python语言代码运行结果图7~Python语言代码运行结果图7 Python语言代码运行结果
1.5 参考文献
[1]王道论坛. 2022年数据结构考研复习指导[M]. 北京:电子工业出版社, 2021.
写在最后面的话,此博客为个人通过书本和互联网作为学习资源自己整理而成的笔记,仅作为知识记录及后期复习所用,如有错误,还望评论指教 ——kent4ngw.
【排序算法】简单选择排序及实例_C语言代码实现_Python代码实现相关推荐
- java中的排序算法——简单选择排序,树形选择排序与堆排序(一)
package com.sort; /** * 选择排序: * 简单选择排序,树形选择排序与堆排序 * */ public class SelecSortDemo { /** * ----- ...
- 排序算法——简单选择排序(PythonJava)
基本思想 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素( ...
- 排序算法-简单选择排序
文章目录 1.基本介绍 2.选择排序的思想 3.选择排序思路分析图 4.代码实现 1.基本介绍 选择排序属于内部排序算法,是从预排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的 ...
- 排序算法 | 简单选择排序,算法的图解、实现、复杂度和稳定性分析
今天讲解一下简单选择排序的原理以及实现.复杂度和稳定性分析 这个内容很简单,轻松加愉快,很快就过了~ 目录 简单选择排序 1 基本思想 2 动态图解 3 代码 4 复杂度分析 简单选择排序 1 基本思 ...
- 排序算法之选择排序(简单选择排序、堆排序)
选择排序(简单选择排序.堆排序) 选择排序 简单选择排序 概念 算法实现 堆排序 概念 算法实现 后续 选择排序 选择排序的基本思想是:每一趟在待排序元素中选取关键字最小(或最大)的元素加入有序子序列 ...
- 排序---初级排序算法(选择排序、插入排序和希尔排序)
写在前面的话: 一枚自学Java和算法的工科妹子. 算法学习书目:算法(第四版) Robert Sedgewick 算法视频教程:Coursera Algorithms Part1&2 本文 ...
- 堆排序算法c语言筛选法,【排序】排序算法之选择排序
排序算法之选择排序 罗朝辉(http://www.cppblog.com/kesalin) 转载请注明出处 排序是数据处理中经常使用的一种重要运算,在计算机及其应用系统中,花费在排序上的时间在系统运行 ...
- 【排序算法】选择排序(Selection sort)
选择排序(Selection sort)是一种简单直观的排序算法. 选择排序介绍 它的基本思想是: 首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置:接着,再从剩余未排序的元 ...
- 【排序算法】选择排序(C语言)
[排序算法]-- 选择排序 目录 一.选择排序的原理 二.选择排序的代码实现 三.选择排序的优化 1. 优化思路 2. 排序优化后问题 3. 优化代码的实现 四.选择排序的效率 一.选择排序的原理 ...
- 函数模板案例_利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序 排序规则从大到小,排序算法为选择排序 分别利用char数组和int数组进行测试
案例描述: 利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序 排序规则从大到小,排序算法为选择排序 分别利用char数组和int数组进行测试 #include <iostream& ...
最新文章
- 2012年的这些经典书目你读了没?
- rap 接口管理 java_有没有类似阿里rap的api管理方案(rap太卡了)
- Determine destination location of apt-get install package?
- Asp.Net 创建MetaWeblog API
- 关于PHP安装扩展pdo_odbc
- boost::mp11::tuple_for_each相关用法的测试程序
- OpenGL PN三角形的分化
- SASL讲解,以及在Spark中的应用
- IP地址的定义和含义
- Ubuntu录制gif图
- mysql如何更新视图,MySQL更新视图
- SpringBoot集成MyBatis操作Mysql(极速体验版)
- java 值传递 引用传递的理解 言简意赅 一字千金
- 北京2019积分落户名单
- python从入门学习笔记
- php语言讲座,学习PHP语言的十大诀窍
- 正数的原码,反码,补码
- POI实际应用之POI简介
- 计算机网络——第二章(应用层)
- layim使用中添加自定义事件与显示样式
热门文章
- golang设计模式——代理模式
- PHP的调试环境程序集成包----phpStudy
- 常见的数据质量问题有哪些
- GNSS双RTK技术 提高自动驾驶高精定位的可靠性
- mpeg2是信源还是信道编码_论信源编码与信道编码
- python就业班百度云_2017python就业班百度云在线分享
- 17.使用CSS完成视差滚动效果?
- Python解读通讯录(Excel表格)
- 没有个性化如何设置桌面计算机,w7桌面没有个性化怎么办_w7桌面个性化不见了如何解决...
- 惠普HP OfficeJet 5264 一体机驱动