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

【数据结构】直接选择排序

1.选择排序

1.1 基本思想:

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

数据元素排完 。

1.2 直接选择排序:

在元素集合 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. 稳定性:不稳定

这里我们做一下改进,遍历一次数组选出最大和最小的数,最小的数放最左边,最大的数放最右边,排成升序

实现步骤:

1.设置两个存放下标的变量 start,end;

2.遍历数组中的元素,找出当前区间最小和最大数据的下标;

3.数组中最大和最小的数据放到数组两头

4.start++,end--,如果 start < end 就一直进行

// 选择排序 
void SelectSort(int* a, int n)
{int start = 0;int end = n - 1;while ( start < end){int mini, maxi;mini = maxi = start;for (int i = start+1; i <= end; i++){if (a[mini] > a[i]){mini = i;}if (a[maxi] < a[i]){maxi = i;}}swap(&a[start], &a[mini]);//如果maxi和start的位置重叠,则maxi的位置需要修正if (maxi == start){maxi = mini;}swap(&a[end], &a[maxi]);end--;start++;}
}

http://www.xdnf.cn/news/1334647.html

相关文章:

  • 基于卷积神经网络的多输出数据回归预测CNN(多输入多输出)
  • 机器学习总复习
  • C++高频知识点(三十二)
  • 【免费AI文档助手开发实战系列】基于正则表达式的PDF脱敏python服务构建(一)
  • 自动驾驶导航信号使用方式调研
  • “无纸化办公”加速推进,房产证智能识别技术或成行业标配
  • STM32H743芯片STM32H750解密解析
  • 云原生俱乐部-RH294知识点归纳(1)
  • 直流无刷电机旋转原理
  • Model Context Protocol (MCP) - 尝试创建和使用一下MCP Client
  • [Mysql数据库] 用户管理选择题
  • ssl代理
  • 面试记录5 .net
  • MySQL 8.x的性能优化文档整理
  • 深入理解与应用向量嵌入(Vector Embeddings):原理、实现与多场景实践
  • linux 内核 - 内存管理单元(MMU)与地址翻译(一)
  • 【GPT入门】第49课 LlamaFacotory 训练千问
  • macos 多个版本的jdk
  • 从ioutil到os:Golang在线客服聊天系统文件读取的迁移实践
  • Linux 文件系统权限管理(补充)
  • 技术半衰期悖论:AI时代“不可替代领域“的深耕地图
  • 【Day 30】Linux-SQL语句
  • 23种设计模式——模板方法模式(Template Method Pattern)详解
  • JavaScript 性能优化实战:从原理到落地的完整指南
  • 深入解析RAGFlow六阶段架构
  • element table 表格多选框选中高亮
  • 实现自己的AI视频监控系统-第一章-视频拉流与解码2
  • 【网络运维】Linux 文本处理利器:sed 命令
  • Obsidian 1.9.10升级
  • Lecture 6 Kernels, Triton 课程笔记