数据结构之排序--选择排序

选择排序

每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。

直接选择排序**:**

在元素集合 array[i]--array[n-1] 中选择关键码最大 ( 小 ) 的数据元素
若它不是这组元素中的最后一个 ( 第一个 ) 元素,则将它与这组元素中的最后一个(第一个)元素交换在剩余的array[i]--array[n-2] ( array[i+1]--array[n-1] )集合中,重复上述步骤,直到集合剩余 1 个元素

直接选择排序的特性总结:

  1. 直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用
  2. 时间复杂度: O(N^2)
  3. 空间复杂度: O(1)
  4. 稳定性:不稳定

实现

cs 复制代码
void SelectSort(int* a, int n)
{
	int begin = 0, end = n - 1;
	while (begin < end)
	{
		int maxi = begin, mini = begin;
		for (int i = begin; i <= end; i++)
		{
			if (a[i] > a[maxi])
			{
				maxi = i;
			}

			if (a[i] < a[mini])
			{
				mini = i;
			}
		}

		Swap(&a[begin], &a[mini]);
		// 如果maxi和begin重叠,修正一下即可
		if (begin == maxi)
		{
			maxi = mini;
		}

		Swap(&a[end], &a[maxi]);

		++begin;
		--end;
	}
}
相关推荐
快去睡觉~18 分钟前
力扣238:除自身之外数组的乘积
数据结构·算法·leetcode
Aczone2818 分钟前
数据结构(五):顺序循环队列与哈希表
数据结构·哈希算法·散列表
小马爱打代码28 分钟前
算法 - 贪心算法
算法·贪心算法
yics.1 小时前
数据结构——栈和队列
java·数据结构
胖咕噜的稞达鸭2 小时前
单链表专题---暴力算法美学(1)(有视频演示)
算法
秋难降2 小时前
【数据结构与算法】———回溯之美
数据结构·算法
ikkkkkkkl3 小时前
LeetCode:347.前K个高频元素
数据结构·c++·算法·leetcode
_祝你今天愉快3 小时前
SparseArray & ArrayMap
android·数据结构
筱砚.3 小时前
【数据结构——并查集】
数据结构·算法
F_D_Z4 小时前
【感知机】感知机(perceptron)学习算法的对偶形式
人工智能·学习·算法·支持向量机