当前位置: 首页 > article >正文

选择排序 冒泡排序 MySQL 架构

1) 选择排序

思想:

1、遍历数组,选择找到最大值,记录最大值下标 maxindex,然后将最大值与最后一个值交换,

      即 swap(vec[maxindex] , vec[n-1]);

2、在剩下的待排序数组中,重新找到最大值,重复第一步,swap(vec[maxindex] , vec[n-2]);

     循环操作,直至数组排序完成。

#include<iostream>

using namespace std;

const int N = 1e4;

int num[N],n;

void Select_sort(){

    for(int i = 1; i < n; i++){//外层for控制找最大值的次数
    
        int index = 0;

        for(int j = 1; j <= n-i; j++){//找待排序元素中的最大值

            if(num[index] < num[j])  

                index = j;

        } 

        swap(num[index],num[n-i]);//交换

    }

}


int main(){

    cin>>n;

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

        cin>>num[i];

    }

    Select_sort();

    for(int i = 0; i < n; i++)
    
        cout<<num[i]<<" ";

    return 0;

}

平均时间复杂度:O(n^2)

第一次排序时是 n 个元素,比较 n-1 次

第二次排序时是 n-1 个元素,比较 n-2 次

第 n-1 次排序时是 2 个元素,比较 1 次

第 n 次排序时是 1 个元素,比较 0 次

元素交换次数为 k ( k < n-1 次)

时间复杂度 = 比较次数 + 交换次数

故选择排序时间复杂度为 O( 1+2+3+...+n-1+k) = O(n*(n-1)/2+k) = O(n^2)

空间复杂度:O(1)

在原数组上操作,即使用了常数级空间O(1)

稳定性:

不稳定

实例:3 2 3 1 从小到大排序(选择最小的放前面)排序之后红色 3 在黑色 3 前面,所以不稳定。

2)冒泡排序   

思想:

1、从左到右,相邻两数两两比较,若下标小的数大于下标大的数则交换,将最大的数放在数组的最后一位(即下标 n-1 的位置)

2、采用相同的方法,再次遍历数组,将第二大的数,放在数组倒数第二的位置(即 n-2 的位置),以此类推,直到数组有序。

3、优化:当数组在整个遍历过程中没有发生交换,说明待排序数组已经有序,此时可以直接结束排序过程(用 bool 类型变量做标记)。

#include<iostream>

using namespace std;

const int N = 1e4;

int num[N],n;

void Bubble_sort(){

    for(int i = 1; i < n; i++){
    
        bool flag = false;

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

            if(num[j] > num[j+1])  {

                swap(num[j],num[j+1]);

                flag = true;

            }     

        } 

        if(!flag) return;

    }

}


int main(){

    cin>>n;

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

        cin>>num[i];

    }

    Bubble_sort();

    for(int i = 0; i < n; i++)
    
        cout<<num[i]<<" ";

    return 0;

}

平均时间复杂度:O(n^2)

最好时间复杂度(有序情况):O(n)

比较 n-1 次,交换 0 次,故最好时间复杂度为 O(n)

最坏时间复杂度(逆序情况):O(n^2)

第一次排序时是 n 个元素,比较 n-1 次,交换 n-1 次

第二次排序时是 n-1 个元素,比较 n-2 次,交换 n-2 次

第 n-1 次排序时是 2个元素,比较 1 次,交换 1 次

第 n 次排序时是 1 个元素,比较 0 次,交换 0 次

故冒泡排序时间复杂度为 O((1+2+3...+n-1)*2) = O(n*(n-1)) = O(n^2)

空间复杂度:O(1)

在原数组上操作,即使用了常数级空间 O(1)

稳定性

稳定

3) 请说下你对 MySQL 架构的了解?

先看下 MySQL 的基本架构图:

大体来说,MySQL可以分为Server层和存储引擎两部分。

连接器:负责和客户端建立连接,获取权限,管理连接

查询缓存:在一个查询语句中,会先到缓存中查看之前是否查询过这条语句(如果开启了查询缓存功能):若存在则直接返回缓存的结果,优点是命中缓存时效率很高,缺点是缓存失效非常频繁,只要有对一个表的更新,该表所有的查询缓存都会被清空,MySQL8.0 版本已删除了查询缓存功能

分析器:对SQL语句进行词法分析和语法分析,判断语法是否合法

优化器:对SQL语句进行优化,选择索引

执行器:调用存储引擎接口,返回结果

存储引擎层负责:数据的存储和提取,其架构是插件式的,支持 InnoDB MyISAM 等多个存储引擎。从 MySQL 5.5.5 版本开始默认的是 InnoDB,但是在建表时可以通过 engine = MyISAM 来指定存储引擎。不同存储引擎数据的存取方式不同,支持的功能也不同。


http://www.kler.cn/a/453055.html

相关文章:

  • 解决PDF.js部署到IIS服务器上后报错mjs,.ftl 404 (Not Found)
  • scala基础学习_运算符
  • MySql详细教程-从入门到进阶(超实用)
  • pytorch MoE(专家混合网络)的简单实现。
  • 命令行之巅:Linux Shell编程的至高艺术(中)
  • linux 常用 Linux 命令指南
  • [python SQLAlchemy数据库操作入门]-08.ORM删除不再需要的股票记录
  • C项目 天天酷跑(下篇)
  • ZCC5090EA适用于TYPE-C接口,集成30V OVP功能, 最大1.5A充电电流,带NTC及使能功能,双节锂电升压充电芯片替代CS5090EA
  • 开源智能工业软件技术发展分析
  • “黄师日报”平安小程序springboot+论文源码调试讲解
  • Spring的注解@Autowired 是什么意思?
  • 【每日学点鸿蒙知识】长时任务、profiler allocation、事件订阅、getTagInfo、NativeWindow
  • 重温设计模式--状态模式
  • 基于Spring Boot的中国戏曲文化传播系统
  • Android 中的生产者-消费者模式实现
  • kubeadm 安装最新 k8s 集群
  • Ubuntu20.4 VPN+Docker代理配置
  • 正则表达式优化之实际应用场景优化
  • HBU深度学习实验17-优化算法比较和分析
  • 数据结构的基础与应用
  • 【贪吃蛇小游戏 - JavaIDEA】基于Java实现的贪吃蛇小游戏导入IDEA教程
  • HarmonyOS NEXT 实战之元服务:静态案例效果---查看国内航班服务
  • Go语言实现守护进程的挑战
  • 【人工智能】使用Python构建推荐系统:从协同过滤到深度学习
  • 在Windows11上编译C#的实现Mono的步骤