假期集训课(基础算法1)

文章介绍了三种基础的排序算法:冒泡排序通过不断交换相邻元素实现排序,最佳和最差情况下的时间复杂度分别为O(n)和O(n^2);选择排序在每轮选择最小(或最大)元素放入已排序区,时间复杂度始终为O(n^2);插入排序则将每个元素插入到已排序序列的正确位置,其时间复杂度也与数据顺序相关,最好和最坏情况分别为O(n)和O(n^2)。
摘要由CSDN通过智能技术生成

排序

  • 冒泡排序
  • 选择排序
  • 插入排序

冒泡排序(Bubble sort)

冒泡排序是把N个数通过N-1轮排序,升序中大的往下沉,小的往上浮。降序中大的往上浮,小的往下沉。
下面例子为升序。
在这里插入图片描述

它的时间复杂度与数据有关:

最优O(n)
最坏O(n2)
#include<iostream>

#include<cmath>

using namespace std;

int main()

{
    int n;

    cin>>n;

    int a[n];

    for(int i=0;i<n;i++)cin >> a[i];

    for(int i=0;i<n-1;i++){
       for(int j=0;j<n-1-i;j++){
          if(a[j]>a[j+1])swap(a[j],a[j+1]);

       }

    }

    for(int i=0;i<n;i++)cout << a[i] <<' ';

    return 0;

}

选择排序(selection sort)

进行n轮选择,选择其中最小(最大)的数据放在排好数据的后面。
。/

它的时间复杂度与数据没有关系。为O(n2)。

#include<iostream>

#include<cmath>

using namespace std;

int main()

{
    int n,min;

    cin>>n;

    int a[n];

    for(int i=0;i<n;i++)cin >> a[i];

    for(int i=0;i<n;i++){
       min=i;

       for(int j=i;j<n;j++){
          if(a[min]>a[j])

          min=j;

       }

       if(min!=i)swap(a[min],a[i]);

    }

    for(int i=0;i<n;i++)cout << a[i] <<' ';

    return 0;

}

插入排序(Insert sort)

在这里插入图片描述

它的时间复杂度与数据有关:

最优O(n)
最坏O(n2)
~~~cpp
#include<iostream>

#include<cmath>

using namespace std;

int main()

{
    int n,key;

    cin>>n;

    int a[n];

    for(int i=0;i<n;i++)cin >> a[i];

    for(int i=1;i<n;i++){
       key=i;

       for(;key>=1&&a[key]<a[key-1];key--){
       swap(a[key],a[key-1]);

       }

    }

    

    for(int i=0;i<n;i++)cout << a[i] <<' ';

    return 0;

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值