博客
关于我
C++数据结构与算法之排序——选择排序
阅读量:800 次
发布时间:2019-03-25

本文共 1138 字,大约阅读时间需要 3 分钟。

选择排序是一种基础且重要的排序算法。它通过选择并交换数组中最大值与最后一个位置的元素,最终实现对数组从尾部到头部进行排序。

选择排序的工作原理

选择排序的基本思想是:通过反复在数组中选择最大的元素,并将其交换到当前排序好的位置,从而逐步将数组按要求排序。这一过程实际上是通过逐步将数组从未排序区域减少,最终完成排序。

以下是一步步描述如何进行选择排序:

  • 在这个算法中,首先需要找到当前未排序区域中最大的值。这个值通常被称为最大值或者maxIndex.

  • 一旦找到了最大值所在的位置(maxIndex),就交换该位置所在的元素与数组最后一个位置的元素的位置。即,swap(a[maxIndex], a[n-1]).

  • 这一过程会持续进行,直到前n-1个元素已经被部分排序,剩下的最后一个位置能容纳最大的未排序的元素。这个过程促使数组逐渐向有序方向发展.

  • 重复这个过程,直到整个数组已经完成排序。

  • 需要注意的是,选择排序通常会选择从最末端交换,因为此时数组中剩下的部分已经是有序的了。

    选择排序的实现代码

    以下是一个实现选择排序的C++代码示例:

    #include 
    using namespace std;void selectSort(vector
    & vec) { int maxIndex = 0; int n = vec.size(); for(int i = n; i > 0; --i) { maxIndex = 0; for(int j = 1; j < i; ++j) { if(vec[j] > vec[maxIndex]) { maxIndex = j; } } swap(vec[maxIndex], vec[i-1]); }}

    代码解释

  • 初始化变量:首先,我们初始化一个用于跟踪当前最大的元素位置的变量maxIndex设置为0。

  • 数组长度获取:接着,我们获取数组的大小n。

  • 主循环:从数组末尾开始,依次处理每个元素。

  • 内循环:在当前未排序的子数组中,寻找最大的元素。通过比较每个元素与当前maxIndex所指的位置元素,找到更大的数据,更新maxIndex。

  • 交换位置:将最大的元素和当前未排序的最后一个位置进行交换。

  • 继续执行循环:当所有元素都被处理后,数组就被排序完成了。

  • 这种实现方式的时间复杂度为O(n²),这使得它成为较为基础但相对费时的排序算法。虽然随着数据规模的增大,选择排序的效率可能会成为瓶颈,但它仍然是学习和理解排序算法的重要工具。

    转载地址:http://oxnyk.baihongyu.com/

    你可能感兴趣的文章
    mysql 更新子表_mysql 在update中实现子查询的方式
    查看>>
    MySQL 有什么优点?
    查看>>
    mysql 权限整理记录
    查看>>
    mysql 权限登录问题:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
    查看>>
    MYSQL 查看最大连接数和修改最大连接数
    查看>>
    MySQL 查看有哪些表
    查看>>
    mysql 查看锁_阿里/美团/字节面试官必问的Mysql锁机制,你真的明白吗
    查看>>
    MySql 查询以逗号分隔的字符串的方法(正则)
    查看>>
    MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT 、分页查询的优化、合理使用连接、子查询的优化)(上)
    查看>>
    mysql 查询,正数降序排序,负数升序排序
    查看>>
    MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)...
    查看>>
    mysql 死锁 Deadlock found when trying to get lock; try restarting transaction
    查看>>
    mysql 死锁(先delete 后insert)日志分析
    查看>>
    MySQL 死锁了,怎么办?
    查看>>
    MySQL 深度分页性能急剧下降,该如何优化?
    查看>>
    MySQL 深度分页性能急剧下降,该如何优化?
    查看>>
    MySQL 添加列,修改列,删除列
    查看>>
    mysql 添加索引
    查看>>
    MySQL 添加索引,删除索引及其用法
    查看>>
    MySQL 用 limit 为什么会影响性能?
    查看>>