排序算法系列之选择排序

选择排序

1 基本原理

1 核心思想:选择排序是一种简单直观的排序算法。它在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

2 实例说明

如上图所示,以一组数据{12,6,1,15,3,19} 为例,进行直接插入排序的算法演示:

  1. 在原数组中选择最小元素 1 ,交换到数组头部。原数组分为两个部分:已排序序列和未排序序列。
  2. 在未排序序列中选择最小元素 3 ,交换到已排序序列中。
  3. 重复第2步操作,直至未排序序列中元素数量为0,排序完成。

3 代码实现

void SelectSort(vector<int> &a)
{
    for (int i = 0; i<a.size(); i++)
    {
        int min = a[i];

        for (int j = i + 1; j<a.size(); j++)
        {
            if (min>a[j])
            {
                swap(min, a[j]);
            }
        }
        a[i] = min;

        for (auto x : a)      //排序过程输出
            cout << x << " ";
        cout << endl;
    }
}

4 性能分析

  • 1 时间复杂度
    选择排序的比较次数为 n(n-1)/2,交换次数介于0和(n-1)次之间,故而在最优、最坏和平均情况下,其时间复杂度为 O(n^2)。
  • 2 空间复杂度
    选择排序过程中,需要临时变量存储待排序元素,因此空间复杂度为O(1)
  • 3 算法稳定性
    选择排序是不稳定的算法,在选择数值和交换过程中它们的顺序可能会发生变化。

猜你喜欢

转载自blog.csdn.net/hlc246/article/details/81092296
今日推荐