• 数据结构-选择排序


    1、选择排序

    选择排序就是通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1<=i<=n)个记录交换之;

    选择排序的主要优点与数据移动有关。

    如果某个元素位于正确的最终位置上,则它不会被移动。

    选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对 n 个元素的表进行排序总共进行至多 n - 1 次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。

    选择排序的算法步骤如下:

    1. 在未排序序列中找到最小(大)元素,存放到排序序列的起始位置;

    2. 然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾;

    3. 以此类推,直到所有元素均排序完毕。

    void SelectSort(SqList *L)
    {
        int i, j, min,count1,count2;
        count1 = count2 = 0;
        for (i = 1; i < L->length;i++)
        {
            min = i;    //将当前下标定义为最小值下标
            for (j = i + 1; j <= L->length;j++)    //循环之后的数据
            {
                count1++;
                if (L->r[min]>L->r[j])    //如果由小于当前最小值的关键字
                    min = j;    //更新最小值
            }
            if (i != min)    //若是我们在上面循环中找到最小值,则min会改变,与i不同,就需要进行交换
            {
                swap(L, i, min);
                count2++;
            }
        }
        printf("loop count:%d,  swap count:%d
    ", count1, count2);
    }

    简单选择排序的性能要略优于冒泡排序

  • 相关阅读:
    ZooKeeper 到底解决了什么问题?
    10个 Linux 命令,让你的操作更有效率
    你的镜像真的安全吗?
    谁动了我的主机? 之活用History命令
    Linux vs Unix
    Linux应急响应入门——入侵排查
    (一)Sharding-JDBC分库分表概述
    (三)微服务的注册中心—Eureka
    (二)springcloud功能组件
    (一)微服务基础
  • 原文地址:https://www.cnblogs.com/lemonzhang/p/12398671.html
Copyright © 2020-2023  润新知