1. 选择排序基本思想:
每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。
选择排序包含:1.直接选择排序 2.堆排序
2 直接选择排序:
●在元素集合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. 稳定性:不稳定
此处代码(排升序)已经进行优化,是一次性选最小和最大分别换到数组头和数组尾
代码实现:
// 直接选择排序
void SelectSort(int* a, int n)
{
int begin = 0;
int end = n - 1;
while (begin<=end)
{
int mini = begin;
int maxi = end;
for (int i = begin; i <= end; i++)//一次挑两个,与头和尾进行交换
{
if (a[i] < a[mini])
{
mini = i;
}
if (a[i] > a[maxi])
{
maxi = i;
}
}
Swap(&a[begin],&a[mini]);
if (maxi == begin)//防止begin=max,二次交换
{
maxi = mini;
}
Swap(&a[end],&a[maxi]);
++begin;
--end;
}
}
这个博客如果对你有帮助,给博主一个免费的点赞就是最大的帮助❤
欢迎各位点赞,收藏和关注哦❤
如果有疑问或有不同见解,欢迎在评论区留言哦❤
后续我会一直分享双一流211西北大学软件(C,数据结构,C++,Linux,MySQL)的学习干货以及重要代码的分享