6种排序算法

  • 稳定排序:冒泡排序、归并排序、插入排序
  • 不稳定排序:选择排序、希尔排序、快速排序

冒泡排序

  • 时间复杂度:O(n2)
#include<bits/stdc++.h>
using namespace std;
#define MAXN 1000
int a[MAXN], n;
void BubbleSort(int a[], int n){
    //n-1趟排序
    for(int i = 1; i < n; i++){
        bool ans = false;
        for(int j = n; j > i; j--){
            //交换相邻位置逆序数,将最小数冒泡到未排序序列的最前方
            if(a[j] < a[j-1]){
                swap(a[j],a[j-1]);
                ans = true;
            }
        }
        //无交换发生,已经有序,直接结束
        if(ans == false){
            return;
        }
    }
}
int main()
{
    cin >>n;
    for(int i = 1; i <= n; i++){
        cin >>a[i];
    }
    BubbleSort(a,n);

    for(int i = 1; i <= n; i++){
        cout <<a[i] <<" ";
    }
    return 0;
}

选择排序

  • 时间复杂度:O(n2)
#include<bits/stdc++.h>
using namespace std;
#define MAXN 1000
int a[MAXN], n;
void SelectSort(int a[], int n){
    for(int i = 1; i < n; i++){
        //取出未排序序列中的最小数
        int minnum = 0x3ff, minn = 0;
        for(int j = i; j <= n; j++){    
            if(a[j] < minnum){
                minnum = a[j];
                minn = j;
            }
        }
        //将选出的数放到合适位置
        swap(a[i],a[minn]);
    }
}
int main()
{
    cin >>n;
    for(int i = 1; i <= n; i++){
        cin >>a[i];
    }
    SelectSort(a,n);

    for(int i = 1; i <= n; i++){
        cout <<a[i] <<" ";
    }
    return 0;
}

插入排序

  • 时间复杂度:O(n2)
直接插入排序
#include<bits/stdc++.h>
using namespace std;
#define MAXN 1000
int a[MAXN], n;
void InsertSort(int a[], int n){
    int i, j, temp;
    for(i = 2; i <= n; i++){
        //寻找未排序的第一个逆序数
        if(a[i-1] > a[i]){
            //拿出该数
            temp = a[i];
            //给即将插入的数腾出对应的位置
            for(j = i; (j>1) && (a[j-1]>temp); j--){
                a[j] = a[j-1];
            }
            //插入该数
            a[j] = temp;
        }
    }
}
int main()
{
    cin >>n;
    for(int i = 1; i <= n; i++){
        cin >>a[i];
    }
    InsertSort(a,n);

    for(int i = 1; i <= n; i++){
        cout <<a[i] <<" ";
    }
    return 0;
}
折半插入排序
#include<bits/stdc++.h>
using namespace std;
int a[100001], n;

void InsertSort(int a[], int n){
    int i, j, l, r, mid;
    for(i = 2; i <= n; i++){
        a[0] = a[i];
        l = 1, r = i-1;
        while(l <= r){
            mid = (l + r) / 2;
            if(a[mid] > a[0]) r = mid - 1;
            else l = mid + 1;
        }
        for(j = i - 1; j >= r+1; j--){
            a[j+1] = a[j];
        }
        a[r+1] = a[0];
    }
}

int main(){
    cin >>n;
    for(int i = 1; i <= n; i++){
        cin >>a[i];
    }   
    InsertSort(a,n);
    for(int i = 1; i <= n; i++){
        cout <<a[i] <<" ";
    }
}

希尔排序

  • 时间复杂度:O(n1.3)-O(n2)
#include<bits/stdc++.h>
using namespace std;
#define MAXN 1000
int a[MAXN], n;
void ShellSort(int a[], int n){
    int i, j, temp;
    //对半式增量
    for(int mid = n/2; mid > 0; mid/=2){
        //插入排序
        for(i = mid; i <= n; i++){
            temp = a[i];
            for(j = i; j > mid; j -= mid){
                if(a[j-mid] > temp){
                    a[j] = a[j-mid];
                }else{
                    break;
                }
            }
            a[j] = temp;
        }
    }
}
int main()
{
    cin >>n;
    for(int i = 1; i <= n; i++){
        cin >>a[i];
    }
    ShellSort(a,n);

    for(int i = 1; i <= n; i++){
        cout <<a[i] <<" ";
    }
    return 0;
}

快速排序

  • 最优时间复杂度:O(nlogn)
  • 最坏时间复杂度:O(n2)
#include<bits/stdc++.h>
using namespace std;
int a[100001], n;
int part(int a[], int low, int high){
    int l = low, r = high, pivot = a[l];
    while(l < r){
        while(l < r && pivot < a[r]) r--;
        if(l < r){
            swap(a[l],a[r]);
            l++;
        }
        while(l < r && pivot > a[l]) l++;
        if(l < r){
            swap(a[l],a[r]);
            r--;
        }
    }
    //返回基准点所在位置
    return l;
}
void QuickSort(int a[], int low, int high){
    int mid;
    if(low < high){
        //将比基准点大的数放到右边,比基准点小的数放到左边,并返回基准点位置
        mid = part(a, low, high);
        //递归左边
        QuickSort(a, low, mid-1);
        //递归右边
        QuickSort(a, mid+1, high);
    }
}
int main(){
    cin >>n;
    for(int i = 1; i <= n; i++){
        cin >>a[i];
    }   
    QuickSort(a,1,n);
    for(int i = 1; i <= n; i++){
        cout <<a[i] <<" ";
    }
}

归并排序

  • 时间复杂度:O(nlogn) (最好=最坏=平均)
#include<bits/stdc++.h>
using namespace std;
int a[100001], n;

void MergeSort(int a[], int l, int r){
    int b[100001];
    //递归到只有一个元素,直接返回
    if(l == r) return;
    int mid = (l+r)/2;
    MergeSort(a,l,mid);
    MergeSort(a,mid+1,r);
    //合并序列
    int p = l, q = mid + 1;
    for(int i = l; i <= r; i++){
        if(q > r || (p <= mid && a[p] <= a[q])){
            b[i] = a[p++];
        }else{
            b[i] = a[q++];
        }
    }
    //还原到a数组里
    for(int i = l; i <= r; i++) a[i] = b[i];
}

int main(){
    cin >>n;
    for(int i = 1; i <= n; i++){
        cin >>a[i];
    }   
    MergeSort(a,1,n);
    for(int i = 1; i <= n; i++){
        cout <<a[i] <<" ";
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/890973.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

NFTScan | 10.07~10.13 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期&#xff1a;2024.10.07~ 2024.10.13 NFT Hot News ​01/ 数据&#xff1a;9 月份加密市场大多数指标均出现下降&#xff0c;链上总交易量下降 13% 10 月 7 日&#xff0c;据 The Block 研究总监 la…

【C#网络编程】基础概念2

文章目录 网络、数据包和协议网络数据包协议TCP、UDP 地址客户端和服务器套接字 网络、数据包和协议 计算机网络通过通信通道互连的机器组成&#xff0c;通常把这些机器称为主机和路由器&#xff0c;主机是是运行应用程序&#xff08;如 Web 浏览器&#xff09;的计算机。路由器…

同三维T80001HK4 四路4K30HDMI H.264编码器

4路同时编码&#xff0c;带4路3.5外置音频 同三维T80001HK4四路4K30HDMI H.264编码器 同三维T80001HK4用于高清视频信号&#xff08;4K30Hz&#xff09;编码及网络传输的硬件设备&#xff0c;采用最新高效H.264高清数字视频压缩技术&#xff0c;具备稳定可靠、高清晰度、低码率…

CyberRt实践之Hello Apollo(Apollo 9.0版本)

apollo9.0环境安装参考官方网站 apollo.baidu.com/community/Apollo-Homepage-Document?docBYFxAcGcC4HpYIbgPYBtXIHQCMEEsATAV0wGNkBbWA5UyRFdZWVBEAU0hFgoIH0adPgCY%2BADwCiAVnEAhAILiAnABZxEgOzK1Y%2BQA51M3ROUnJBsbK2WZoyUdkBhcXoAMhlwDFlARnUXZdzE9AGY%2BbFINADYpUhCEFW…

JavaEE 多线程第二节 (多线程的简单实现Thread/Runable)

1. 创建线程&#xff08;继承 Thread 类&#xff09;步骤&#xff1a; 继承 Thread 类&#xff1a; 创建一个类并继承 Thread 类&#xff0c;然后重写 run() 方法&#xff0c;在该方法中写入线程执行的代码 class MyThread extends Thread {Overridepublic void run()…

SpringBoot 之 配置 RestTemplate + 跳过https 验证

上截图 目录文件结构 在配置文件下创建下面两个文件 文件内容 HttpsClientHttpRequestFactory.java package org.fri.config;import org.apache.http.ssl.SSLContexts; import org.apache.http.ssl.TrustStrategy; import org.springframework.context.annotation.Configur…

重学SpringBoot3-安装Spring Boot CLI

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-安装Spring Boot CLI 1. 什么是 Spring Boot CLI&#xff1f;2. Spring Boot CLI 的安装2.1. 通过 SDKMAN! 安装2.2. 通过 Homebrew 安装&#xff08;适…

SpringCloud-OpenFeign-服务接口调用

是什么 把需要暴露的api使用接口来暴露&#xff0c;客户端需要调用的时候&#xff0c;直接查看这个接口中有没有就可以了 通用步骤 架构说明 common模块 common 引入 openfeign 新建服务接口类 FeignClient(value "cloud-payment-service") // 服务名 public i…

【C语言】动态内存管理及相关笔试题

文章目录 一、为什么有动态内存分配二、malloc和free1.malloc函数的使用2.free函数的使用 三、calloc和realloc1.calloc函数的使用2.realloc函数的使用 四、常见动态内存分配的错误五、动态内存经典笔试题题1题2题3 六、总结C/C中程序内存区域划分 一、为什么有动态内存分配 我…

SpringBoot基础(四):bean的多种加载方式

SpringBoot基础系列文章 SpringBoot基础(一)&#xff1a;快速入门 SpringBoot基础(二)&#xff1a;配置文件详解 SpringBoot基础(三)&#xff1a;Logback日志 SpringBoot基础(四)&#xff1a;bean的多种加载方式 目录 一、xml配置文件二、注解定义bean1、使用AnnotationCon…

SCRM呼叫中心高保真Axure原型 源文件分享

在数字化时代&#xff0c;客户关系管理&#xff08;CRM&#xff09;对于企业的成功至关重要。SCRM呼叫中心后台作为一款专为CRM设计的软件原型&#xff0c;致力于为企业提供高效、智能的客户沟通解决方案。本文将详细介绍该产品的核心功能及其对企业提升客户满意度和销售业绩的…

C++,STL 030(24.10.14)

stack容器&#xff08;栈&#xff09;的基本概念&#xff1a; 1.stack容器是一种先进后出的数据结构&#xff0c;它只有一个出口。 2.图例&#xff1a; 注意&#xff1a; (1)进栈顺序&#xff1a;a1 -> a2 -> a3 -> a4 -> a5 (2)出栈顺序&#xff1a;a5 -> …

机器学习-决策树详解

决策树 决策树简介 学习目标 1.理解决策树算法的基本思想 2.知道构建决策树的步骤 【理解】决策树例子 决策树算法是一种监督学习算法&#xff0c;英文是Decision tree。 决策树思想的来源非常朴素&#xff0c;试想每个人的大脑都有类似于if-else这样的逻辑判断&#xff…

12.1-基础柱状图构建

Python基础综合案例——数据可视化 动态柱状图 通过Bar构建基础柱状图 反转x和y轴 调用 bar.reversal_axis() 我们现在所看到的数值是从下到上的&#xff0c;当我们反转之后数据是从左向右的&#xff0c;我们现在把数据放到柱的右边。即数值标签在右侧 添加y轴数据的时候&am…

oceanbase的日志量太大,撑爆磁盘,修改下日志级别

oceanbase的日志量太大&#xff0c;撑爆磁盘&#xff0c;修改下日志级别&#xff1a; [adminlnpg ~]$ obclient -h127.0.0.1 -uroot -P2881 -plinux123 Welcome to the OceanBase. Commands end with ; or \g. Your OceanBase connection id is 3221561020 Server version: O…

Android基于gradle task检查各个module之间资源文件冲突情况

做组件化开发的时候&#xff0c;我们经常会遇到各个不同的module之间资源文件冲突的问题&#xff0c;运行也不报错&#xff0c;但是会出现覆盖的问题&#xff0c;导致运行之后发送错误的效果。 所以我们需要利用一个gradlke 脚本task&#xff0c;来自动化检查资源文件冲突。 …

CST学习笔记(二)Floquet模式激励设置

CST学习笔记&#xff08;二&#xff09;Floquet模式激励设置 在CST中我们常常使用Floquet模式来仿真频率选择表面(FSS)或者超材料等&#xff0c;但是我们设置好Zmax的floquet模式数量后&#xff0c;启动仿真&#xff0c;会发现S参数一栏中有很多我们不想要看的S参数&#xff0…

OpenAI Canvas:提升编程与写作效率的全新工作界面

随着人工智能技术的飞速发展&#xff0c;大语言模型&#xff08;LLM&#xff09;不仅限于生成文本&#xff0c;还能逐步扩展至编程、设计等任务的支持。近期&#xff0c;OpenAI 推出了一个名为 Canvas 的全新功能&#xff0c;专门用于协助用户进行编程和写作。这一功能与 Claud…

【React】使用脚手架或Vite包两种方式创建react项目

1.使用脚手架搭建React项目&#xff1a; 在终端窗口运行如下命令即可&#xff1a; npx create-react-app react-basic(创建的文件目录) npx&#xff1a;Node.js工具命令&#xff0c;用于查找并执行后续的包命令。 2.使用Vite包创建React项目&#xff1a; 在终端窗口运行如…

【STM32 Blue Pill编程实例】-OLED显示DHT22传感器数据

OLED显示DHT22传感器数据 文章目录 OLED显示DHT22传感器数据1、DHT22介绍2、硬件准备与接线3、模块配置3.1 定时器配置3.2 DHT22引脚配置3.3 OLED配置4、代码实现在本文中,我们将介绍如何将 DHT22 温度和湿度传感器与 STM32 Blue Pill 开发板连接,并使用 HAL 库在 STM32CubeI…