常见排序算法之选择排序

选择排序

基本思想:

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

直接选择排序

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

void SelectSort(int* a, int n)
{
? ? int begin = 0, end = n - 1;//记录末尾和开始位置

? ? while (begin < end)//当begin小于end说明数组没有被完全排序
? ? {
? ? ? ? // [begin, end]
? ? ? ? int mini = begin, maxi = begin;//将开始位置的值的下标赋予mini,maxi
? ? ? ? for (int i = begin + 1; i <= end; i++)
? ? ? ? {
? ? ? ? ? ? if (a[i] > a[maxi])//比开始位置值大则maxi记录这一位置的下标
? ? ? ? ? ? {
? ? ? ? ? ? ? ? maxi = i;
? ? ? ? ? ? }

? ? ? ? ? ? if (a[i] < a[mini])//比开始位置值小则mini记录这一位置的下标
? ? ? ? ? ? {
? ? ? ? ? ? ? ? mini = i;
? ? ? ? ? ? }
? ? ? ? }

? ? ? ? Swap(&a[begin], &a[mini]);//最小值与开始值交换
? ? ? ? // max如果被换走了,修正一下
? ? ? ? if (maxi == begin)
? ? ? ? {
? ? ? ? ? ? maxi = mini;
? ? ? ? }

? ? ? ? Swap(&a[end], &a[maxi]);
? ? ? ? ++begin;
? ? ? ? --end;
? ? }
}

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

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

常见排序算法之选择排序

文章链接: /25982.html

文章标题:常见排序算法之选择排序

文章版权:云服务器租用科技所发布的内容,部分为原创文章,转载请注明来源,网络转载文章如有侵权请联系我们!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
云数据中心投稿分享

数据结构之常见排序算法的实现

2023-12-12 10:04:24

建站教程

常见排序算法之堆排序

2023-12-14 10:03:50

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧

云服务器租用科技 - 最新云主机促销服务器租用优惠

http://www.vxiaotou.com