选择排序

概述

  • 内部排序
  • 不稳定
  • 最好最坏都是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是待排元素个数),只是选择排序减少了交换的次数

posted @ 2022-06-18 00:05  YaosGHC  阅读(33)  评论(0)    收藏  举报