排序算法——简单选择排序

简介

英文名:Select Sort
是选择排序中最简单的算法

步骤

以下用数组2,5,8,3,6,9,1,4,7为例
从小到大排序

1.在未排序部分找到最小的那个数
  • 一开始当作全部乱序,从乱序第一个开始找

在这里插入图片描述

  • 找到最小数1

在这里插入图片描述

2.看找到的最小数的位置,如果不是未排序部分的第一个,就将它和第一个交换
  • 现在1不是第一个,所以我们把它和2交换位置

在这里插入图片描述在这里插入图片描述

3.重复前两步直到所有数排序完毕
  • 1已经排好,所以接下来从第二个数开始是乱序部分,从第二个数开始重复前两步
    在这里插入图片描述

  • 找到最小数2

在这里插入图片描述

  • 和前面数交换

在这里插入图片描述
在这里插入图片描述

  • 继续

在这里插入图片描述

后面步骤也很简单,不再给出

代码

  • 首先我们需要进行n-1次遍历去排每一个数(只剩最后一个数不用排)
  • 用一个k去记录当前乱序部分最小数的下标
  • 从第二个数开始遍历找最小数,与k 所标记的数比较
  • 如果最小数下标不是乱序第一个,交换两个数
#include<bits/stdc++.h>

using namespace std;

void SelectSort(int a[],int len)
{
    
    
    int k;
    for(int i=0;i<len-1;i++)//未排序第一个数
    {
    
    
        k=i;//取第一个数
        for(int j=i+1;j<len;j++)//遍历未排序部分
            if(a[j]<a[k])
                k=j;//取更小
        if(i!=k)//不在未排序第一的位置
            swap(a[k],a[i]);
        for(int t=0;t<len;t++)
            cout<<a[t]<<" ";
        cout<<endl;
    }
}


int main()
{
    
    
    int a[9]={
    
    2,5,8,3,6,9,1,4,7};
    int len=9;
    SelectSort(a,len);

    return 0;
}




特性

1.时间复杂度

O ( n 2 ) O(n^2) O(n2)

2.空间复杂度

平均的空间复杂度为: O ( 1 ) O(1) O(1)

3.算法稳定性

相同元素的前后顺序是否改变
举个很简单的例子
在这里插入图片描述

上图中,蓝色1会与蓝色2交换,直接改变两个2的前后位置

所以简单选择排序排序是不稳定的

小测验

好久不见小测验

老规矩,现在是把最小数交换到前面,改一个最大数交换到后面

在这里插入图片描述

冲冲冲ψ(`∇´)ψ

猜你喜欢

转载自blog.csdn.net/qq_44616044/article/details/116496501
今日推荐