浅析数据库算法与数据结构(四)排序

简介: 排序也是数据库中非常非常常见的场景,很多数据的数值字段的顺序具有非常重要的意义,比如我们要选择近期消费的客户并且按照消费得多少排序,形成数据表格,即SELECT * FROM CUSTOMER ORDER BY ORDER_AMOUT LIMIT 100在这个场景中,我们就需要查找出数据并且进行排序,那么常用的排序算法有哪些呢。

排序也是数据库中非常非常常见的场景,很多数据的数值字段的顺序具有非常重要的意义,比如我们要选择近期消费的客户并且按照消费得多少排序,形成数据表格,即

SELECT * FROM CUSTOMER ORDER BY ORDER_AMOUT LIMIT 100

在这个场景中,我们就需要查找出数据并且进行排序,那么常用的排序算法有哪些呢。

 

内排序算法

内排序是被排序的数据元素全部存放在计算机内存中的排序算法。内部排序是指待排的记录全部在内存中完成排序的过程,内部排序也称为内排序。

 

快速排序

快速排序是最常用的排序算法,由Tony Hoare在1959年发明。顾名思义,快速排序的特点就是“快”。快速排序算法通过多次比较和交换来实现排序,其排序流程如下:

(1)首先设定一个分界值,通过该分界值将数组分成左右两部分。

(2)将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于分界值,而右边部分中各元素都大于或等于分界值。

(3)然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。

(4)重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。

 44.png

堆排序

堆是一种近似完全二叉树的结构,最大值堆要求每个子节点的键值总是小于父节点。最小值堆相反,要求每个子节点的键值总是大于父节点。

堆排序算法的实际过程分成三步:

步骤1:建立最大值堆,最大元素在堆顶;

步骤2:重复将堆顶元组移除并插入到排序数组,更新堆使其保持堆的性质;

步骤3:当堆的元素个数为零时,数组排序完毕;

 

外排序

若待排序记录的数量庞大,在排序的过程中需要使用到外部存储介质如磁盘等,这种涉及内外存储器数据交换的排序过程称为外部排序,又称为外排序。

比如说我们在如果查看mysql的执行计划有时候会看到 filesort,这个filesort 就是外排序

image444.png

 

外排序一般是基于归并排序。

归并排序的过程分为两个阶段:

阶段一是分割阶段,将原始待排序数据分成若干个顺串;

阶段二是合并阶段,将所有小顺串合并成一个包含所有数据的大顺串;

 

以上就是数据库所以使用的常见排序算法

目录
相关文章
|
23天前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】基于非支配排序的鲸鱼优化算法NSWOA与多目标螳螂搜索算法MOMSA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】基于非支配排序的鲸鱼优化算法NSWOA与多目标螳螂搜索算法MOMSA求解无人机三维路径规划研究(Matlab代码实现)
|
24天前
|
机器学习/深度学习 运维 算法
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
162 0
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
|
25天前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】多目标螳螂搜索算法MOMSA与非支配排序的鲸鱼优化算法NSWOA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】多目标螳螂搜索算法MOMSA与非支配排序的鲸鱼优化算法NSWOA求解无人机三维路径规划研究(Matlab代码实现)
|
2月前
|
机器学习/深度学习 算法 安全
【无人机3D路径规划】基于非支配排序遗传算法NSGAII的无人机3D路径规划研究(Matlab代码实现)
【无人机3D路径规划】基于非支配排序遗传算法NSGAII的无人机3D路径规划研究(Matlab代码实现)
142 1
|
1月前
|
机器学习/深度学习 算法 安全
【微电网】【创新点】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究(Matlab代码实现)
【微电网】【创新点】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究(Matlab代码实现)
|
2月前
|
机器学习/深度学习 算法 安全
【优化调度】基于matlab非支配排序遗传算法求解车辆充电调度优化问题研究(Matlab代码实现)
【优化调度】基于matlab非支配排序遗传算法求解车辆充电调度优化问题研究(Matlab代码实现)
|
3月前
|
存储 关系型数据库 MySQL
MySQL数据库索引的数据结构?
MySQL中默认使用B+tree索引,它是一种多路平衡搜索树,具有树高较低、检索速度快的特点。所有数据存储在叶子节点,非叶子节点仅作索引,且叶子节点形成双向链表,便于区间查询。
117 4
|
5月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
21天前
|
供应链 算法 Java
【柔性作业车间调度问题FJSP】基于非支配排序的多目标小龙虾优化算法求解柔性作业车间调度问题FJSP研究(Matlab代码实现)
【柔性作业车间调度问题FJSP】基于非支配排序的多目标小龙虾优化算法求解柔性作业车间调度问题FJSP研究(Matlab代码实现)
|
26天前
|
存储 算法 搜索推荐
软考算法破壁战:从二分查找到堆排序,九大排序核心速通指南
专攻软考高频算法,深度解析二分查找、堆排序、快速排序核心技巧,对比九大排序算法,配套动画与真题,7天掌握45%分值模块。
81 0
软考算法破壁战:从二分查找到堆排序,九大排序核心速通指南

热门文章

最新文章