Greenplum 排序算法● 内排序算法 ● 外排序算法 ● Greenplum TupleSort ● 排序在Greenplum中的应用 Outline 6 ● 冒泡排序 ● 插入排序 ● 快速排序 ● 堆排序 ● 基数排序 内排序算法 7 快速排序是最常用的排序算法,由Tony Hoare在1959年发明。 快速排序算法的三个步骤: ● 挑选基准值:从数列中挑选出一个基准元素,称为pivot 10 堆排序是最常用的排序算法,由J.Williams在1964年发明。 ● 堆是一种近似完全二叉树的结构,最大值堆要求每个子节点的键值总是小于父 节点。最小值堆要求每个子节点的键值总是大于父节点。 堆排序算法 ● 步骤1:建立最大值堆,最大元素在堆顶 ● 步骤2:重复将堆顶元组移除并插入到排序数组,更新堆使其保持堆的性质 ● 步骤3:当堆的元素个数为零时,数组排序完毕 堆排序 11 11 ● 建堆 堆排序 9 5 8 1 3 6 2 1 2 5 9 8 3 6 12 ● 移除堆顶元素 堆排序 2 5 8 1 3 6 9 1 9 5 2 8 3 6 13 ● 重新建堆 堆排序 8 5 6 1 3 2 9 1 9 5 8 6 3 2 14 ● 移除堆顶元素 堆排序 2 5 6 1 3 8 9 1 9 5 2 6 30 码力 | 52 页 | 2.05 MB | 1 年前3
Hello 算法 1.0.0b4 Java版11.6. 归并排序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 11.7. 堆排序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 11.8. 桶排序 . . (? log ?) 线性对数阶常出现于嵌套循环中,两层循环的时间复杂度分别为 ?(log ?) 和 ?(?) 。 主流排序算法的时间复杂度通常为 ?(? log ?) ,例如快速排序、归并排序、堆排序等。 // === File: time_complexity.java === /* 线性对数阶 */ int linearLogRecur(float n) { if (n <= 1) 据结构,其入队和出队操作的时间复杂度均为 ?(log ?) ,而建队操作为 ?(?) ,这些操作都非常高效。 ‧ 堆排序:给定一组数据,我们可以用它们建立一个堆,然后不断地执行元素出堆操作,从而得到有序数 据。然而,我们通常会使用一种更优雅的方式实现堆排序,详见后续的堆排序章节。 ‧ 获取最大的 ? 个元素:这是一个经典的算法问题,同时也是一种典型应用,例如选择热度前 10 的新闻 作为微博热搜,选取销量前0 码力 | 342 页 | 27.39 MB | 1 年前3
Hello 算法 1.0.0b4 Python版11.6. 归并排序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 11.7. 堆排序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 11.8. 桶排序 . . (? log ?) 线性对数阶常出现于嵌套循环中,两层循环的时间复杂度分别为 ?(log ?) 和 ?(?) 。 主流排序算法的时间复杂度通常为 ?(? log ?) ,例如快速排序、归并排序、堆排序等。 # === File: time_complexity.py === def linear_log_recur(n: float) -> int: """ 线性对数阶""" if n <= 据结构,其入队和出队操作的时间复杂度均为 ?(log ?) ,而建队操作为 ?(?) ,这些操作都非常高效。 ‧ 堆排序:给定一组数据,我们可以用它们建立一个堆,然后不断地执行元素出堆操作,从而得到有序数 据。然而,我们通常会使用一种更优雅的方式实现堆排序,详见后续的堆排序章节。 ‧ 获取最大的 ? 个元素:这是一个经典的算法问题,同时也是一种典型应用,例如选择热度前 10 的新闻 作为微博热搜,选取销量前0 码力 | 329 页 | 27.34 MB | 1 年前3
Hello 算法 1.0.0b4 C#版11.6. 归并排序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 11.7. 堆排序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 11.8. 桶排序 . . (? log ?) 线性对数阶常出现于嵌套循环中,两层循环的时间复杂度分别为 ?(log ?) 和 ?(?) 。 主流排序算法的时间复杂度通常为 ?(? log ?) ,例如快速排序、归并排序、堆排序等。 // === File: time_complexity.cs === /* 线性对数阶 */ int linearLogRecur(float n) { if (n <= 1) return 据结构,其入队和出队操作的时间复杂度均为 ?(log ?) ,而建队操作为 ?(?) ,这些操作都非常高效。 ‧ 堆排序:给定一组数据,我们可以用它们建立一个堆,然后不断地执行元素出堆操作,从而得到有序数 据。然而,我们通常会使用一种更优雅的方式实现堆排序,详见后续的堆排序章节。 ‧ 获取最大的 ? 个元素:这是一个经典的算法问题,同时也是一种典型应用,例如选择热度前 10 的新闻 作为微博热搜,选取销量前0 码力 | 341 页 | 27.39 MB | 1 年前3
Hello 算法 1.0.0b4 C++版11.6. 归并排序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 11.7. 堆排序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 11.8. 桶排序 . . (? log ?) 线性对数阶常出现于嵌套循环中,两层循环的时间复杂度分别为 ?(log ?) 和 ?(?) 。 主流排序算法的时间复杂度通常为 ?(? log ?) ,例如快速排序、归并排序、堆排序等。 // === File: time_complexity.cpp === /* 线性对数阶 */ int linearLogRecur(float n) { if (n <= 1) return 据结构,其入队和出队操作的时间复杂度均为 ?(log ?) ,而建队操作为 ?(?) ,这些操作都非常高效。 ‧ 堆排序:给定一组数据,我们可以用它们建立一个堆,然后不断地执行元素出堆操作,从而得到有序数 据。然而,我们通常会使用一种更优雅的方式实现堆排序,详见后续的堆排序章节。 ‧ 获取最大的 ? 个元素:这是一个经典的算法问题,同时也是一种典型应用,例如选择热度前 10 的新闻 作为微博热搜,选取销量前0 码力 | 343 页 | 27.39 MB | 1 年前3
Hello 算法 1.0.0b4 Golang版11.6. 归并排序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 11.7. 堆排序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 11.8. 桶排序 . . (? log ?) 线性对数阶常出现于嵌套循环中,两层循环的时间复杂度分别为 ?(log ?) 和 ?(?) 。 主流排序算法的时间复杂度通常为 ?(? log ?) ,例如快速排序、归并排序、堆排序等。 2. 复杂度 hello‑algo.com 25 // === File: time_complexity.go === /* 线性对数阶 */ func linearLogRecur(n 据结构,其入队和出队操作的时间复杂度均为 ?(log ?) ,而建队操作为 ?(?) ,这些操作都非常高效。 ‧ 堆排序:给定一组数据,我们可以用它们建立一个堆,然后不断地执行元素出堆操作,从而得到有序数 据。然而,我们通常会使用一种更优雅的方式实现堆排序,详见后续的堆排序章节。 ‧ 获取最大的 ? 个元素:这是一个经典的算法问题,同时也是一种典型应用,例如选择热度前 10 的新闻 作为微博热搜,选取销量前0 码力 | 347 页 | 27.40 MB | 1 年前3
Hello 算法 1.1.0 C++ 版11.6 归并排序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 11.7 堆排序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 11.8 桶排序 . . log ?) 。 第 2 章 复杂度分析 hello‑algo.com 39 图 2‑13 线性对数阶的时间复杂度 主流排序算法的时间复杂度通常为 ?(? log ?) ,例如快速排序、归并排序、堆排序等。 7. 阶乘阶 ?(?!) 阶乘阶对应数学上的“全排列”问题。给定 ? 个互不重复的元素,求其所有可能的排列方案,方案数量为: ?! = ? × (? − 1) × (? − 2) × ⋯ 优先队列:堆通常作为实现优先队列的首选数据结构,其入队和出队操作的时间复杂度均为 ?(log ?) ,而建队操作为 ?(?) ,这些操作都非常高效。 ‧ 堆排序:给定一组数据,我们可以用它们建立一个堆,然后不断地执行元素出堆操作,从而得到有序数 据。然而,我们通常会使用一种更优雅的方式实现堆排序,详见“堆排序”章节。 ‧ 获取最大的 ? 个元素:这是一个经典的算法问题,同时也是一种典型应用,例如选择热度前 10 的新闻 作为微博热搜,选取销量前0 码力 | 379 页 | 18.47 MB | 1 年前3
Hello 算法 1.1.0 C#版11.6 归并排序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 11.7 堆排序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 11.8 桶排序 . . log ?) 。 第 2 章 复杂度分析 hello‑algo.com 39 图 2‑13 线性对数阶的时间复杂度 主流排序算法的时间复杂度通常为 ?(? log ?) ,例如快速排序、归并排序、堆排序等。 7. 阶乘阶 ?(?!) 阶乘阶对应数学上的“全排列”问题。给定 ? 个互不重复的元素,求其所有可能的排列方案,方案数量为: ?! = ? × (? − 1) × (? − 2) × ⋯ 优先队列:堆通常作为实现优先队列的首选数据结构,其入队和出队操作的时间复杂度均为 ?(log ?) ,而建队操作为 ?(?) ,这些操作都非常高效。 ‧ 堆排序:给定一组数据,我们可以用它们建立一个堆,然后不断地执行元素出堆操作,从而得到有序数 据。然而,我们通常会使用一种更优雅的方式实现堆排序,详见“堆排序”章节。 ‧ 获取最大的 ? 个元素:这是一个经典的算法问题,同时也是一种典型应用,例如选择热度前 10 的新闻 作为微博热搜,选取销量前0 码力 | 378 页 | 18.47 MB | 1 年前3
Hello 算法 1.1.0 Dart版11.6 归并排序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 11.7 堆排序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 11.8 桶排序 . . log ?) 。 第 2 章 复杂度分析 hello‑algo.com 39 图 2‑13 线性对数阶的时间复杂度 主流排序算法的时间复杂度通常为 ?(? log ?) ,例如快速排序、归并排序、堆排序等。 7. 阶乘阶 ?(?!) 阶乘阶对应数学上的“全排列”问题。给定 ? 个互不重复的元素,求其所有可能的排列方案,方案数量为: ?! = ? × (? − 1) × (? − 2) × ⋯ 优先队列:堆通常作为实现优先队列的首选数据结构,其入队和出队操作的时间复杂度均为 ?(log ?) ,而建队操作为 ?(?) ,这些操作都非常高效。 ‧ 堆排序:给定一组数据,我们可以用它们建立一个堆,然后不断地执行元素出堆操作,从而得到有序数 据。然而,我们通常会使用一种更优雅的方式实现堆排序,详见“堆排序”章节。 ‧ 获取最大的 ? 个元素:这是一个经典的算法问题,同时也是一种典型应用,例如选择热度前 10 的新闻 作为微博热搜,选取销量前0 码力 | 378 页 | 18.45 MB | 1 年前3
Hello 算法 1.1.0 Go版11.6 归并排序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 11.7 堆排序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 11.8 桶排序 . . log ?) 。 第 2 章 复杂度分析 hello‑algo.com 39 图 2‑13 线性对数阶的时间复杂度 主流排序算法的时间复杂度通常为 ?(? log ?) ,例如快速排序、归并排序、堆排序等。 7. 阶乘阶 ?(?!) 阶乘阶对应数学上的“全排列”问题。给定 ? 个互不重复的元素,求其所有可能的排列方案,方案数量为: ?! = ? × (? − 1) × (? − 2) × ⋯ 优先队列:堆通常作为实现优先队列的首选数据结构,其入队和出队操作的时间复杂度均为 ?(log ?) ,而建队操作为 ?(?) ,这些操作都非常高效。 ‧ 堆排序:给定一组数据,我们可以用它们建立一个堆,然后不断地执行元素出堆操作,从而得到有序数 据。然而,我们通常会使用一种更优雅的方式实现堆排序,详见“堆排序”章节。 第 8 章 堆 hello‑algo.com 182 ‧ 获取最大的 ? 个元素:这是一个经典的算法问题,同时也是一种典型应用,例如选择热度前0 码力 | 383 页 | 18.48 MB | 1 年前3
共 96 条
- 1
- 2
- 3
- 4
- 5
- 6
- 10













