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

[数据结构]排序之 直接选择排序

1 基本思想:
每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的
数据元素排完 。
2 直接选择排序 :
在元素集合 array[i]--array[n-1] 中选择关键码最大 ( ) 的数据元素
若它不是这组元素中的最后一个 ( 第一个 ) 元素,则将它与这组元素中的最后一个(第一个)元素交换
在剩余的 array[i]--array[n-2] array[i+1]--array[n-1] )集合中,重复上述步骤,直到集合剩余 1 个元素
// 选择排序
void SelectSort(int* a, int n)
{
       int left = 0;
       int right = n - 1;
       while (left < right)
       {
              int mini = left, maxi = left;//记录下标
              for (int i = left+1; i <= right; i++)
              {
                      if (a[i] < a[mini])
                      {
                             mini = i;
                      }
                      if (a[i] > a[maxi])
                      {
                             maxi = i;
                      }
              }
              Swap(&a[left], &a[mini]);
              // 检查最大值位置是否被改变
              if (maxi == left) {
                      maxi = mini;
              }
              Swap(&a[right], &a[maxi]);
              ++left;
              --right;
       }
}
为什么要在两个Swap之间写一个if?
考虑这样一种情况:当  left  位置的元素就是当前未排序部分的最大值时,在第一次交换  a[left]    a[mini]  之后,原本  maxi  指向的最大值元素已经被交换到了  mini  位置,而时  maxi  仍然指向原来的  left  位置,所以在进行第二次交换  a[right]    a[maxi]  时,实际上交换的并不是最大值,从而导致排序结果出错。
直接选择排序的特性总结:
1. 直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用
2. 时间复杂度: O(N^2)  最坏情况和最好情况都是 O(N^2),之前的序列对排序没有影响,所以直接选择排序很烂,基本不会用
3. 空间复杂度: O(1)
4. 稳定性:不稳定

相关文章:

  • 【RTSP】客户端(五)H264 265处理逻辑
  • AI绘画笔记--基础知识
  • LeetCode 每日一题 2025/3/10-2025/3/16
  • 招聘信息|基于SprinBoot+vue的招聘信息管理系统(源码+数据库+文档)
  • 【Linux网络】HTTPS
  • 社交网络分析实战(NetworkX分析Twitter关系图)
  • 第十次CCF-CSP认证(含C++源码)
  • SpringBoot MCP 入门使用
  • Axios 请求取消:从原理到实践
  • XSS漏洞学习(1)
  • 无需 Docker 也能下载镜像!轻松获取 Docker 镜像文件!
  • uniapp scroll组件下拉刷新异步更新数据列表
  • spring-aop笔记
  • 【生日蛋糕——DFS剪枝优化】
  • Vue Date 今天的开始时间与结束时间
  • 【小沐学Web3D】three.js 加载三维模型(vue3)
  • HCIA-AI人工智能笔记1:大模型技术演进与发展历程
  • Jetson Nano NX 重装系统
  • 2024年12月CCF-GESP编程能力等级认证C++编程一级真题解析
  • Mysql查看执行计划、explain关键字详解(超详细)
  • 试点首发进口消费品检验便利化措施,上海海关与上海商务委发文
  • 高新波任西安电子科技大学校长
  • 西安市未央区委书记刘国荣已任西咸新区党工委书记
  • 加拿大新政府宣誓就职
  • 今天北京白天气温超30℃,晚间为何下冰雹?
  • A股三大股指涨跌互现:银行股领涨,两市成交12915亿元