1 void quick_sort(int q[], int l, int r) 2 { 3 if (l >= r) return; 4 5 int i = l - 1, j = r + 1, x = q[l + r >> 1]; 6 while (i < j) 7 { 8 do i ++ ; wh ...
分类:
编程语言 时间:
2020-05-12 00:03:55
阅读次数:
84
堆排序(升序为例) 思路: 1. 首先要建一个大顶堆 2. 交换堆顶元素与最后一个元素,堆的size 1 3. 重复第二步,直至堆中只有元素一个 \ 最好、最坏、平均时间复杂度:O(nlogn) \ 空间复杂度: O(1) \ 稳定性: 不稳定 ...
分类:
编程语言 时间:
2020-05-10 19:07:12
阅读次数:
68
本文介绍了堆排序的相关内容,包括其时间复杂度分析与正确性分析。 ...
分类:
编程语言 时间:
2020-05-03 16:39:15
阅读次数:
58
堆树介绍: 之前在二叉树的时候说到过一种特殊的二叉树 完全二叉树(除了最后一层,其他层的每个结点都是满的,且最后一层结点全部靠左排列,这样就可以很方便的用数组来表示,下标从0开始如果父结点索引是i那么它两个子结点的索引就是2i+1和2i+2,具体的图解见二叉树)。而堆树又是一种特殊的完全二叉树。它的 ...
分类:
编程语言 时间:
2020-05-03 00:35:02
阅读次数:
145
排序算法 一、算法核心思想分类 根据算法的核心思想,可以将十大排序算法分为两类: 1. 比较排序 常见的快速排序、归并排序、堆排序、冒泡排序等属于比较排序。 在排序的最终结果里,元素之间的次序依赖于它们之间的比较。每个数都必须和其他数进行比较,才能确定自己的位置。 2. 非比较排序 计数排序、基数排 ...
分类:
编程语言 时间:
2020-05-02 18:50:31
阅读次数:
93
堆,一种非常重要的数据结构。能实现数据的自动排序,而且排序时间复杂度为O(nlogn),在n达到10^4时,O(n2)级算法就容易超时,但堆排序不会。堆可调用STL系统函数,简化代码,容易书写。一般情况,如果堆元素为数、字符、字符串都可有用默认的排序规则。如果元素是pair类型,其比较大小的方式为先 ...
分类:
其他好文 时间:
2020-04-26 01:37:44
阅读次数:
78
树的实际应用 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序属于选择排序,其最好、最坏、平均时间复杂度均为 O(nlogn) ,他也是 不稳定排序 1. 堆介绍及最大最小堆 堆是具有以下性质的完全二叉树 每个结点的值都大于或等于其左右孩子结点的值,称为大项堆 每个结点的值都小于等于其 ...
分类:
编程语言 时间:
2020-04-24 20:06:27
阅读次数:
68
一、物理结构和概念结构 学习堆必须明确,堆有两个结构,一个是真实存在的物理结构,一个是有助于理解的概念结构。 1. 堆一般由数组实现,但是我们平时在理解堆的时候,会把他构建成一个完全二叉树结构。堆分为大根堆和小根堆:大根堆,就是这颗树里的每一个结点都是以它为根结点的树中的最大值;小根堆则与之相反。 ...
分类:
编程语言 时间:
2020-04-23 19:35:27
阅读次数:
79
内容简介: 本书是《Data Structures and Algorithm Analysis in C》一书第2版的简体中译本。原书曾被评为20世纪顶尖的30部计算机著作之一,作者Mark Allen Weiss在数据结构和算法分析方面卓有建树,他的数据结构和算法分析的著作尤其畅销,并受到广泛好 ...
分类:
编程语言 时间:
2020-04-23 15:04:46
阅读次数:
359
在经典堆排序算法中直接用fixDown操作。for循环构造堆,然后while循环把最大元素和最末尾的元素互换并且修复堆,直到堆为空为止。 堆排序比快速排序慢,但比归并排序快,而且不需要额外的储存空间,且运行时间对输入并不是特别敏感。 1 template <class Item> 2 void he ...
分类:
编程语言 时间:
2020-04-22 23:00:39
阅读次数:
110