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

c语言选择排序_C语言必学的12个排序算法:简单选择排序(第6篇)

ab894c574758515a522952df1fac2e9c.png

基本思想

简单选择排序(simple selection sort)是最简单的一种排序方式,其基本思想很简单,以从小到大排序为例,每趟排序在当前的待排数据记录序列中选择最小的元素放在前面,这样进行n-1趟排序以后,整个数据记录有序。

简单选择排序是稳定的内部排序方法,时间复杂度是O(n^2)。

同样举例来说:

例如:给定10个整数:(4,3,1,2,6,5,0,9,8,7) 从小到大排序。

第一趟子排序:针对整个数据记录(4,3,1,2,6,5,0,9,8,7)。

选择最小的数据0,放入前面第一个数据4所在位置,同时将4放入0的所在的位置。得到(0,3,1,2,6,5,4,9,8,7),其中0已经有序。

第二趟子排序:整个记录序列中(0,3,1,2,6,5,4,9,8,7)的数据(0)已经有序,只需针对子数据记录序列(3,1,2,6,5,4,9,8,7)。

选择最小的数据1,放入前面当前子记录序列第一个数据3所在位置,同时将3放入1的所在的位置。最终得到(0,1,3,2,6,5,4,9,8,7),其中(0,1)已经有序。

第三趟子排序:整个记录序列中(0,1,3,2,6,5,4,9,8,7)的数据(0,1)已经有序,只需针对子数据记录序列(3,2,6,5,4,9,8,7)。

选择最小的数据2,放入前面当前子记录序列第一个数据3所在位置,同时将3放入2的所在的位置。最终得到(0,1,2,3,6,5,4,9,8,7),其中(0,1,2)已经有序。

.....

这样进行n-1趟子排序以后,所有的数据记录有序。

代码实现

*/
#include <stdio.h>
void simple_select_sort(int a[], int length)
{
  int i,j,min,t;
  for(i=0; i<length-1; i++)
  {
    // 当前子记录序列中选择最小的记录 
    min = i;
    for(j=i+1; j<length; j++)
    {
      if(a[j] < a[min])
        min = j;  
    }
    // 交换位置 
    if(i!=min)
    {
      t = a[i];
      a[i] = a[min];
      a[min] = t;
    }
  }
}
int main(void)
{
    int a[10] = {4,3,1,2,6,5,0,9,8,7};
   simple_select_sort(a, 10);
    int i;
    for(i=0; i<10; i++)
      printf("%d ", a[i]);
    return 0;
}

其实做为一个学习者,有一个学习的氛围跟一个交流圈子特别重要这里我推荐一个C/C++基础交流583650410,不管你是小白还是转行人士欢迎入驻,大家一起交流成长。

f8fc19025f2ea925c0f1f73d982dc61a.png

4296bc121748c6cb3dfc8e1ab10ed4b4.png

相关文章:

  • python合并视频和音频_Python实现五毛钱特效
  • gitlab账号密码登录不了_DevOps元素周期表—1号元素 Gitlab
  • python根据输入的三个数求平均分_Python 实现输入任意多个数,并计算其平均值的例子...
  • hive 字符串拼接_Hive行转列详解
  • idea 单元测试_java单元测试覆盖率统计
  • iframe 注入js_基于HTML注入的一种攻击思路
  • java多线程实例_Java 多线程三大核心点实例讲解
  • python安装依赖包经常出错怎么办_如何解决Python包依赖问题
  • python 定时播放音乐_python – 如何在第一首歌曲结束后安排音频文件在pygame中自动播放?...
  • jedis依赖_Jedis认知
  • python中lower的用法_Python string islower()用法及代码示例
  • 前端为什么有的接口明明是成功回调却执行了.catch失败回调_【微信支付】微信支付成功之后没有请求回调接口...
  • axture动画原型制作_新的工作流程如何将ZBrush雕刻的角色变成虚幻引擎的动画角色...
  • pip版本和python版本一样吗_windows下多版本python安装与pip安装和pip使用 吐血总结...
  • 全职只学python要多久_全职学python,几周才能在上海找到一个很普通很普通的数据方面的实习(实习不是兼职)?...
  • Apache的基本使用
  • CentOS7 安装JDK
  • CODING 缺陷管理功能正式开始公测
  • ComponentOne 2017 V2版本正式发布
  • Druid 在有赞的实践
  • ES6--对象的扩展
  • HashMap ConcurrentHashMap
  • leetcode98. Validate Binary Search Tree
  • Mybatis初体验
  • scrapy学习之路4(itemloder的使用)
  • webpack+react项目初体验——记录我的webpack环境配置
  • 电商搜索引擎的架构设计和性能优化
  • 动态魔术使用DBMS_SQL
  • 工作中总结前端开发流程--vue项目
  • 浏览器缓存机制分析
  • 前嗅ForeSpider教程:创建模板
  • 算法之不定期更新(一)(2018-04-12)
  • 微信公众号开发小记——5.python微信红包
  • 小程序开发中的那些坑
  • #if 1...#endif
  • #stm32驱动外设模块总结w5500模块
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (windows2012共享文件夹和防火墙设置
  • (二)丶RabbitMQ的六大核心
  • (十) 初识 Docker file
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NET6实现破解Modbus poll点表配置文件
  • @DataRedisTest测试redis从未如此丝滑
  • @hook扩展分析
  • @Transactional 竟也能解决分布式事务?
  • [CERC2017]Cumulative Code
  • [codevs 2822] 爱在心中 【tarjan 算法】