选择排序

  1. —选择排序—
    1. 算法描述
    2. 代码实现
    3. 算法分析
    4. 稳定性

—选择排序—

​ 在未排序的序列中找到最小(大),放在排序序列的起始位置,再从剩余的未排序找最小(大)放已排序序列末尾,重复步骤。

算法描述

具体算法描述如下:

  • <1>.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。

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

  • <3>.重复第二步,直到所有元素均排序完毕。

选择排序

代码实现

void Selection_Sort(int a[], int n)
{
     // 外层循环 存放有序序列,最后一个元素已经有序,故n-1
    for (int i = 0; i < n - 1; ++i)
    {
        int index = i;    // 先假定有序序列的末尾为最小值
        for (int j = i + 1; j < n; j++)   //内层循环  意图寻找无序序列的最小数
        {
            if (a[index] > a[j])        //寻找最小的数
            {
                index = j;           //将最小数的索引保存
            }
        }
        // 结束循环 找到最小数的索引 交换元素
        int temp = a[index];
        a[index] = a[i];
        a[i] = temp;
    }
}

算法分析

  • 平均情况:T(n) = O(n2)

  • 最佳情况:T(n) = O(n2)

  • 最差情况:T(n) = O(n2)

稳定性

  • 不稳定

举例:

按照找最小值,与无序区首部交换的思想则不稳定:

排序前:
2 4 4* 3
排序后:

2 3 4* 4

两个相同的元素 排序后 位置发生了改变 故无序 。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 351134995@qq.com

×

喜欢就点赞,疼爱就打赏