选择排序
选择排序其实算是排序家族当中比较容易理解的排序方法.选择排序的思想最重要的就是这个选择. 你不是要排序嘛. 那么每次在你的所有数据当中
选出来最小的哪一个放到前面. 然后再次选一个次小的放到第二个的位置. 听起来跟插入排序很相似. 但是这里有很大的不同. 插入排序是不同的元
素找位置住下来. 选择排序是不同的位置找元素来住.但是呢两者的目的都是相等的. 但其实吧插入排序是优于选择排序的,你这样想选择排序他要找
到最小的他必须把这一组数据遍历完. 而插入排序每次其实不一定会把所有数据遍历完,有时候只需要循环一次就插入了. 但是今天我们的主题是选择
排序,那么我就不损选择排序了.
其实选择排序的过程非常容易具体分为三个步骤:
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).