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

选择排序(C语言)以及选择排序优化

一、图解

        基本思想: 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的 数据元素排完 。

        直接选择排序: 在元素集合array[i]--array[n-1]中选择关键码最大(小)的数据元素 若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个)元素交换 在剩余的array[i]--array[n-2](array[i+1]--array[n-1])集合中,重复上述步骤,直到集合剩余1个元素

直接选择排序的特性总结:

1. 直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用

2. 时间复杂度:O(N^2)

3. 空间复杂度:O(1)

4. 稳定性:不稳定 

二、代码 

void Swap(int* p1, int* p2)
{int tmp = *p1;*p1 = *p2;*p2 = tmp;
}
// 选择排序
void SelectSort(int* a, int n)
{for (int i = 0; i < n - 1; i++){int mini = i;int maxi = i;for (int j = i + 1; j < n; j++){if (a[j] < a[mini]){mini = j;}}Swap(&a[i], &a[mini]);}
}
// 选择排序优化,
void SelectSortOptimize(int* a, int n)
{int begin = 0;int end = n - 1;while (begin < end){int mini = begin;int maxi = begin;for (int j = begin + 1; j <= end; j++){if (a[j] < a[mini]){mini = j;}if (a[j] > a[maxi]){maxi = j;}}Swap(&a[begin], &a[mini]);//如果begin==maxi,此时要修正if (begin == maxi){maxi = mini;}Swap(&a[end], &a[maxi]);begin++;end--;}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 学习C语言第十七天
  • 数据结构day02(链表)
  • luckyexcel 编辑预览excel文件
  • 【机器学习第9章——聚类】
  • elasticsearch 字段类型的索引、字段类型修改、字段类型、分页、排序、分组、聚合
  • Java+vue3+element-plus+ts上传图片到服务器并返回图片可访问链接
  • 关于SOA和微服务
  • docker swarm如何让两个副本分别跑在两台不同的主机上
  • ubuntu 24.04 软件源配置,替换为国内源
  • 【GitLab】使用 Docker 安装 GitLab:配置 SSH 端口
  • 数据守护者:SQL一致性检查的艺术与实践
  • dev c++中,在C++11模式下编译带M_PI宏的文件报错的解决办法
  • es查看与删除索引
  • LVGL在方形屏幕上的参考案例
  • Python爬虫——爬取某网站的视频
  • [译]前端离线指南(上)
  • AngularJS指令开发(1)——参数详解
  • Javascript Math对象和Date对象常用方法详解
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • nfs客户端进程变D,延伸linux的lock
  • Phpstorm怎样批量删除空行?
  • SpringCloud集成分布式事务LCN (一)
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 近期前端发展计划
  • 七牛云假注销小指南
  • 如何合理的规划jvm性能调优
  • 深入浅出Node.js
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 数据仓库的几种建模方法
  • 双管齐下,VMware的容器新战略
  • 延迟脚本的方式
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • #### golang中【堆】的使用及底层 ####
  • #define,static,const,三种常量的区别
  • #if和#ifdef区别
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (175)FPGA门控时钟技术
  • (poj1.3.2)1791(构造法模拟)
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (四)Controller接口控制器详解(三)
  • (图)IntelliTrace Tools 跟踪云端程序
  • (一)、软硬件全开源智能手表,与手机互联,标配多表盘,功能丰富(ZSWatch-Zephyr)
  • (源码分析)springsecurity认证授权
  • (转)可以带来幸福的一本书
  • (转)拼包函数及网络封包的异常处理(含代码)
  • ****Linux下Mysql的安装和配置
  • .cn根服务器被攻击之后
  • .NET 8.0 发布到 IIS
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET 常见的偏门问题
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数