博客对您有所帮助的话,欢迎给个赞啦,你的鼓励是对我最大的支持! 有不足之处也请您评论指教


简单选择排序

简单选择排序是选择排序的一种。

问:那么什么是选择排序?

答:每趟从待排序的记录中选出关键字最小的元素,顺序放在已排序的记录序列末尾,直到全部排序结束为止。

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代码实现相关推荐

  1. java中的排序算法——简单选择排序,树形选择排序与堆排序(一)

    package com.sort; /**  * 选择排序:  * 简单选择排序,树形选择排序与堆排序  *   */ public class SelecSortDemo { /** * ----- ...

  2. 排序算法——简单选择排序(PythonJava)

    基本思想 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素( ...

  3. 排序算法-简单选择排序

    文章目录 1.基本介绍 2.选择排序的思想 3.选择排序思路分析图 4.代码实现 1.基本介绍 选择排序属于内部排序算法,是从预排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的 ...

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

    今天讲解一下简单选择排序的原理以及实现.复杂度和稳定性分析 这个内容很简单,轻松加愉快,很快就过了~ 目录 简单选择排序 1 基本思想 2 动态图解 3 代码 4 复杂度分析 简单选择排序 1 基本思 ...

  5. 排序算法之选择排序(简单选择排序、堆排序)

    选择排序(简单选择排序.堆排序) 选择排序 简单选择排序 概念 算法实现 堆排序 概念 算法实现 后续 选择排序 选择排序的基本思想是:每一趟在待排序元素中选取关键字最小(或最大)的元素加入有序子序列 ...

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

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

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

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

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

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

  9. 【排序算法】选择排序(C语言)

    [排序算法]-- 选择排序 目录 一.选择排序的原理 二.选择排序的代码实现 三.选择排序的优化 1. 优化思路 2. 排序优化后问题 3. 优化代码的实现 四.选择排序的效率 一.选择排序的原理 ​ ...

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

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

最新文章

  1. 2012年的这些经典书目你读了没?
  2. rap 接口管理 java_有没有类似阿里rap的api管理方案(rap太卡了)
  3. Determine destination location of apt-get install package?
  4. Asp.Net 创建MetaWeblog API
  5. 关于PHP安装扩展pdo_odbc
  6. boost::mp11::tuple_for_each相关用法的测试程序
  7. OpenGL PN三角形的分化
  8. SASL讲解,以及在Spark中的应用
  9. IP地址的定义和含义
  10. Ubuntu录制gif图
  11. mysql如何更新视图,MySQL更新视图
  12. SpringBoot集成MyBatis操作Mysql(极速体验版)
  13. java 值传递 引用传递的理解 言简意赅 一字千金
  14. 北京2019积分落户名单
  15. python从入门学习笔记
  16. php语言讲座,学习PHP语言的十大诀窍
  17. 正数的原码,反码,补码
  18. POI实际应用之POI简介
  19. 计算机网络——第二章(应用层)
  20. layim使用中添加自定义事件与显示样式

热门文章

  1. golang设计模式——代理模式
  2. PHP的调试环境程序集成包----phpStudy
  3. 常见的数据质量问题有哪些
  4. GNSS双RTK技术 提高自动驾驶高精定位的可靠性
  5. mpeg2是信源还是信道编码_论信源编码与信道编码
  6. python就业班百度云_2017python就业班百度云在线分享
  7. 17.使用CSS完成视差滚动效果?
  8. Python解读通讯录(Excel表格)
  9. 没有个性化如何设置桌面计算机,w7桌面没有个性化怎么办_w7桌面个性化不见了如何解决...
  10. 惠普HP OfficeJet 5264 一体机驱动