数据结构 — 选择排序

选择排序




选择排序其实算是排序家族当中比较容易理解的排序方法.选择排序的思想最重要的就是这个选择. 你不是要排序嘛. 那么每次在你的所

有数据当中 选出来最小的哪一个放到前面. 然后再次选一个次小的放到第二个的位置. 听起来跟插入排序很相似. 但是这里有很大的不

同. 插入排序是不同的元 素找位置住下来. 选择排序是不同的位置找元素来住.但是呢两者的目的都是相等的. 但其实吧插入排序是优于

选择排序的,你这样想选择排序他要找 到最小的他必须把这一组数据遍历完. 而插入排序每次其实不一定会把所有数据遍历完,有时候只

需要循环一次就插入了. 但是今天我们的主题是选择 排序,那么我就不损选择排序了.


其实选择排序的过程非常容易具体分为三个步骤:

1.从你需要排序的序列找出最小的元素.

2.如果最小元素不是待排序列的第一个元素,将其和第一个元素互换.

3.从余下N-1个元素中,找出关键字最小的元素,重复(1)(2)操作,直到排序结束.






实现代码:

void ChooseSort(int* a, size_t size)
{
	int mix = 0;

	for (int i = 0; i < size; i++)
	{
		mix = i;
		for (int j = i + 1; j < size; ++j)
		{
			if (a[mix] > a[j])
			{
				mix = j;
			}
		}
		swap(a[i], a[mix]);
	}
}

简单选择排序的比较与序列的初始序列没有关系,就算你给我的时候就是一个有序的序列. 选择排序还是会老老实实的去循环查找,因为

我不遍历 完根本就不知道我到底是不是最小的. 假设待排序列有N个元素,则比较次数总是N(N-1)/2. 所以时间复杂度无论无何都是O(N^2).

算法名称  最差时间复杂度  平均时间复杂度  最优时间复杂度  空间复杂度  稳定性

选择排序    O(n2)           O(n2)                        O(n2)              O(1)        不稳定


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值