当前位置: 首页 > 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最简单实现。

为什么不使用物理分割?

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

 

相关文章:

  • web各类编码笔记
  • git子模块--命令--列表版
  • 清山垃圾的3个问题
  • 【Bluedroid】蓝牙Hid Host get_protocol全流程源码解析
  • UnLua源码分析(二)IUnLuaInterface
  • Mybatis Plus 拦截器忽略机制全解:InterceptorIgnoreHelper 源码与实战
  • IntelliJ IDEA 中配置 Gradle 的分发方式distribution
  • C++23 std::out_ptr 和 std::inout_ptr:提升 C 互操作性
  • 智能语音通信新标杆——A-29P神经网络AI降噪回音消除模块深度解析
  • NeuralRecon技术详解:从单目视频中实现三维重建
  • Go语言--语法基础5--基本数据类型--循环语句
  • 云手机应该怎么选?和传统手机有什么区别?哪些云手机支持安卓12系统?
  • Kotlin Native与C/C++高效互操作:技术原理与性能优化指南
  • IP、子网掩码、默认网关、DNS
  • 【python实战】二手房房价数据分析与预测
  • day27:零基础学嵌入式之进程
  • 海外仓系统 选浩方WMS一款体验更好的海外仓管理系统
  • 内存管理 : 02 内存分区与分页
  • leetcode2025. 分割数组的最多方案数-hard
  • 除自身以外数组的乘积与加油站问题:算法揭示数据中的隐藏关系与环路行驶的最优解
  • 怎么用webstorm做网站/深圳纯手工seo
  • 免手机微网站/广告公司取名字参考大全
  • 公司官网的作用/潍坊百度快速排名优化
  • 从事网站建设/自媒体发布平台
  • 自己建设影视网站/除了91还有什么关键词
  • wordpress 分类 文章数量/seo网站介绍