• 数据结构-选择排序


    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);
    }

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

  • 相关阅读:
    烂笔头@WP 的博文仅供自己学习的备忘录
    工具---搜索
    ubuntu---安装teamviewer和向日葵
    Ubuntu---标注工具 XXX-labelImg
    ubuntu---深度学习标注工具CasiaLabeler
    ubuntu---kazam安装
    ubuntu---notepadqq安装
    ubuntu---TeamViewer安装
    ubuntu---鼠标的乌龙事件
    ubuntu---终端下不显示 中文文字 的解决方法
  • 原文地址:https://www.cnblogs.com/lemonzhang/p/12398671.html
Copyright © 2020-2023  润新知