📂排序
🔖排序
2022-06-18 00:05阅读: 21评论: 0推荐: 0

选择排序

概述

  • 内部排序
  • 不稳定
  • 最好最坏都是O(N2)
  • 原地排序空间O(1)

思路

  1. 先从待排序列中找出最小(大)的元素,放到已排序列的首位
  2. 从待排序列中找出最小(大)的元素,追加到已排序列
  3. 重复2直到排序完成

实现

template<typename T>
void selection_sort(vector<T>& arr) {
for (int i = 0; i < arr.size() - 1; i++) {
// 因为这里要i和j(i后面地每一个元素)比较,所以i<size-1而不是size
int min = i;
// 这里的min不是序列最小值,而是序列最小值地下标
for (int j = i + 1; j < arr.size(); j++) {
if (arr[j] < arr[min]) {
min = j;
}
}
// 找到最小的元素,然后与当前元素地位置互换
swap(arr[i], arr[min]);
}
}

很明显,这是一个基于比较(但是基于选择而不是交换)的排序,将每个元素与它后面地序列元素一一比较,找到最小的元素并交换位置

冒泡排序是,将每一个元素与后一个元素相比较,如果大于则交换位置
两个排序都需要跑n轮(n是待排元素个数),只是选择排序减少了交换的次数

本文作者:YaosGHC

本文链接:https://www.cnblogs.com/yaocy/p/16387451.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   YaosGHC  阅读(21)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起