数据结构 — 选择排序

来源:互联网 发布:求免费数据恢复软件 编辑:程序博客网 时间:2024/05/22 13:13

选择排序




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

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

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

到最小的他必须把这一组数据遍历完. 而插入排序每次其实不一定会把所有数据遍历完,有时候只需要循环一次就插入了. 但是今天我们的主题是选择

排序,那么我就不损选择排序了.


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

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)        不稳定


原创粉丝点击