考研算法第28天:冒泡排序和简单选择排序 【排序】

算法介绍

冒泡排序就不需要多说了,大一就会的东西,所以这里就不多言了。记录一下y总对他的分析就是了

简单选择排序

选择排序分析动图演示_就这烊了的博客-CSDN博客_选择排序动图

每次循环遍历后面的元素,然后将最小的放到最前面:举个例子

第一次 如上图 第一次发现最小的元素是2就将位于第一个位置的元素和2互换

第二次 如上图 第二次发现第二小的数是3就将位于第二个位置上的元素和3互换

。。。。。。

以此类推

算法题目

#include <iostream>

using namespace std;

const int N = 1000010;
int q[N];

void select_sort(int n){
    for(int i=0;i<n-1;i++){
        int maxidex = i;
        for(int j=i+1;j<n;j++){
            if(q[j]<q[maxidex]){
                maxidex = j;
            }
        }
        swap(q[i],q[maxidex]);
    }
    return;
}
int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++)scanf("%d",&q[i]);
    select_sort(n);
    for(int i=0;i<n;i++)printf("%d ",q[i]);
    return 0;
}

算法复杂度分析

时间复杂度:

最优的:本来就有序的,所以就是O(N^2)

平均的:O(N^2)

最差的:O(N^2)

空间复杂度:O(1)

稳定性:不稳定(稳定性一般写算法不考,但是笔试中经常问,所以还是要有这样的影响)

为啥不稳定?因为比如一个序列 212 它选择排序之后变成了 122 但是我们这时候发现原先位于最前面的2确到了最后,原先最后的2到了中间,所以是不稳定的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值