选择排序和冒泡排序;MySQL架构

1. 选择排序和冒泡排序

(1)选择排序

  • 原理

    • 选择排序有升序和降序两种排序方法。升序排序的原理是:对于一个无序数列,先假定其中一个数为这个数列的最小值,然后让这个假定最小值和其他数依次比较,找到这个数列中真实的最小值,将真实最小值和假定最小值的位置互换,完成第一轮排序并排好第一个数。第二轮在剩余的数中假定一个最小值,然后让这个假定最小值和其他数(除第一次已经排好的数)依次比较,找到这个数列中真实的最小值,将真实最小值和假定最小值的位置互换,完成第二轮排序并排好第二个数,以此类推直到排序完成。
  • 代码

|---|------------------------------------------|
| | void selectionSort(int arr[], int n) { |
| | int i, j, minIndex, temp; |
| | for (i = 0; i < n-1; i++) { |
| | minIndex = i; |
| | for (j = i+1; j < n; j++) { |
| | if (arr[j] < arr[minIndex]) { |
| | minIndex = j; |
| | } |
| | } |
| | temp = arr[minIndex]; |
| | arr[minIndex] = arr[i]; |
| | arr[i] = temp; |
| | } |
| | } |

  • 时间复杂度:O(n2)。

  • 空间复杂度:O(1)。选择排序只需要常量级别的额外空间,用于交换元素。

  • 稳定性:选择排序是不稳定的排序算法。因为当数组中存在两个相等的元素时,选择排序可能会改变它们的相对位置。

  • 代码提升:虽然选择排序的时间复杂度是O(n^2),对于大规模数据集来说效率较低,但可以通过一些优化策略来提高效率,如使用二元选择和三元选择等。然而,这些优化策略并不能从根本上改变选择排序的时间复杂度。

(2)冒泡排序

  • 原理

    • 冒泡排序是比较相邻的两个数,如果第一个数比第二个数大,这两个数就要交换位置,如果第一个数小于第二个数则不用变换位置。每一轮排序后,可以将未排序部分的最大值"冒泡"到已排序部分的末尾。通过多轮排序,最终得到有序数组。
  • 代码

|---|---------------------------------------|
| | void bubbleSort(int arr[], int n) { |
| | int i, j, temp; |
| | for (i = 0; i < n-1; i++) { |
| | for (j = 0; j < n-i-1; j++) { |
| | if (arr[j] > arr[j+1]) { |
| | temp = arr[j]; |
| | arr[j] = arr[j+1]; |
| | arr[j+1] = temp; |
| | } |
| | } |
| | } |
| | } |

  • 时间复杂度:O(n2)。

  • 空间复杂度:O(1)。冒泡排序只需要常量级别的额外空间,用于交换元素。

  • 稳定性:冒泡排序是稳定的排序算法。因为当数组中存在两个相等的元素时,它们不会交换位置,所以相对位置保持不变。

  • 代码提升:冒泡排序虽然简单,但时间复杂度较高。为了改进冒泡排序,可以引入一些优化策略,如提前检测已排序部分(如果在某一轮排序中没有发生交换,说明数组已经有序,可以提前结束排序)、设立标志位(用于记录每一轮排序是否发生了交换)等。然而,这些优化策略并不能从根本上改变冒泡排序的时间复杂度。

2. MySQL架构

MySQL的架构共分为两层:Server层和存储引擎层。

  • Server层:负责建立连接、分析和执行SQL。MySQL大多数的核心功能模块都在这实现,主要包括连接池、执行器、优化器、解析器、预处理器、查询缓存等。另外,所有的内置函数(如日期、时间、数学和加密函数等)和所有跨存储引擎的功能(如存储过程、触发器、视图等)都在Server层实现。
  • 存储引擎层:负责数据的存储和提取。支持InnoDB、MyISAM、Memory等多个存储引擎,不同的存储引擎共用一个Server层。现在最常用的存储引擎是InnoDB,从MySQL 5.5版本开始,InnoDB成为了MySQL的默认存储引擎。常说的索引数据结构,就是由存储引擎层实现的。

总之,选择排序和冒泡排序各有优缺点,适用于不同的场景。而MySQL的架构则体现了其强大的功能和灵活性,能够满足各种复杂的数据处理需求。

相关推荐
酷酷的崽79826 分钟前
【链表世界的深度探索:从基础到高阶的算法解读】—— LeetCode
算法·leetcode·链表
谁怕?一蓑烟雨任平生28 分钟前
数据结构——栈和队列
数据结构·c++
蒙奇D索大1 小时前
【数据结构】如何解决二叉树在遍历查找前驱与后继的问题?线索二叉树来帮您……
c语言·数据结构·考研
ん贤2 小时前
【数据结构】栈与队列:基础 + 竞赛高频算法实操(含代码实现)
java·数据结构·c++·算法
JCBP_2 小时前
C语言经典代码题
c语言·开发语言·汇编·vscode·算法
小林熬夜学编程2 小时前
【高并发内存池】第一弹---深入解析内存池:项目介绍、原理及设计定长内存池全攻略
linux·服务器·c语言·开发语言·c++·算法
这一wa是晚安3 小时前
4.数据结构-树和二叉树
数据结构
刃神太酷啦3 小时前
算法基础篇(蓝桥杯常考点)
数据结构·c++·算法·蓝桥杯c++组
多思考少编码3 小时前
AtCoder Beginner Contest 397 A - D题解
c++·算法·atcoder·算法竞赛
江西理工大学小杨3 小时前
C++菱形继承内存模型
开发语言·c++·算法