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

选择排序算法研究

前言

我自己实现了很多次一些基础的算法,但不知道为什么,像选择排序和冒泡排序这一块我老是容易弄混,这里详细的研究一下。

原理

选择排序是相当于有两块内存空间,一块内存空间是存储已排序的序列,初始为空,一块空间是存储未排序的序列。我们每次就是在未排序序列里面找出目前最小的值的序列号,把他放到已排序空间的尾部,直到未排序序列为空。

实现

#include <iostream>
using namespace std;//算法实现部分
void simpleSelectionSort(int arr[], int n) {for (int i = 0; i < n-1; i++) {      // 遍历每个位置int min_idx = i;                 // 假设当前元素是最小值for (int j = i+1; j < n; j++) {  // 遍历未排序部分找实际最小值if (arr[j] < arr[min_idx]) {min_idx = j;             // 更新最小值索引}}// 交换元素(无需判断 min_idx 是否等于 i)int temp = arr[i];arr[i] = arr[min_idx];arr[min_idx] = temp;}
}//测试部分
int main() {int data[] = {64, 25, 12, 22, 11};//数组int n = sizeof(data)/sizeof(data[0]);//元素个数simpleSelectionSort(data, n);cout << "Sorted array: ";for (int i = 0; i < n; i++) {cout << data[i] << " ";}return 0;
}

核心逻辑

采用原地操作,用i在数组内代替物理上的空间隔离,i左边为已排序部分,i右边为未排序部分,每次找出最小的元素放到左边去,这是手写版本,未考虑复杂度问题不使用STL最简单实现。

为什么不使用物理分割?

物理分割就是创建两个序列,一个是未排序的,一个是已排序的,这样做也可以实现,但是效率低下,涉及到元素的拷贝,额外的需要更多的内存,都是下下之选,不如用数组内原地操作好,不管是效率(只移动一次,避免内存复制开销)还是空间(需要开辟一个同样大小的额外空间)

 

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

相关文章:

  • 【NIPS 2024】Towards Robust Multimodal Sentiment Analysis with Incomplete Data
  • C++异步(1)
  • [Protobuf] 快速上手:安全高效的序列化指南
  • SymAgent:一种用于知识图谱复杂推理的神经符号自学Agent框架
  • Oracle中的[行转列]与[列转行]
  • 【目标检测】【医学图像目标检测】BGF-YOLO:脑肿瘤检测的多尺度注意力特征融合
  • 【linux】systemctl基本语法
  • 康佳Java开发面试题及参考答案
  • 前端vue3实现图片懒加载
  • 【LCEL深度解析】LangChain表达式语言的工程化实践指南
  • 基于stm32单片机的智能盲杖研究
  • # YOLO11解决方案之区域追踪探索
  • Python 数据类型方法(1)
  • Docker 一键部署倒计时页面:Easy Countdown全设备通用
  • 2025年5月18日蓝桥stema省选拔赛答案解析
  • GDB调试工具详解
  • 探索高效视频下载:一款绿色版工具的实用体验
  • FreeRTOSConfig.h的作用
  • Three.js 海量模型加载性能优化指南
  • CMake指令:find_package()在Qt中的应用
  • C# 深入理解类(索引器)
  • Disruptor—3.核心源码实现分析一
  • 黑马点评-分布式锁Lua脚本
  • 在线热更新 Upstream全面掌握 ngx_http_upstream_conf_module
  • 华为OD机试真题——字符串加密 (2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • HTTP 和 HTTPS 的区别
  • 量子力学:量子力学为什么不属于经典物理学的范畴?
  • 【面板数据】上市公司外资持股数据集(2005-2023年)
  • 临床研究统计分析核心概念解析
  • 【MATLAB代码】主动声纳多路径目标测距与定位,测距使用互相关,频率、采样率可调、声速可调,定位使用三边法|订阅专栏后可直接查看源代码