这道题中要求使用O(1)的方法来删除和插入元素的,那么首先需要寻找到对应的元素,这个可以使用map的O(1)的查询时间的,然后是删除对应的元素的,那么可以根据 堆排序中类似的做法把最后面的元素插入到前面来并且置换掉对应的值的。 ...
分类:
其他好文 时间:
2018-09-12 18:10:36
阅读次数:
174
原创 堆排序和快速排序的时间复杂度是相同的,掌握堆排序也是非常重要的! 用一维数组存储堆,有以下规律: 一个结点的下标为i,其左儿子下标为i*2,右儿子下标为i*2+1; 一棵二叉树的最后一个非叶结点的下标为n/2; 首先讲述堆向下调整的过程: 假设从根结点开始向下调整堆(调整为最小堆),将结点i与... ...
分类:
编程语言 时间:
2018-09-11 21:30:53
阅读次数:
171
欢迎Star,本文的所有示例源码都在Github:https://github.com/AndroidHensen/Arithmetic 本篇内容包含 排序的介绍 排序的C的实现 排序的Java的实现 排序的时间复杂度的计算 1、基本思想: 两个数比较大小,较大的数下沉,较小的数冒起来 2、实现步骤 ...
分类:
编程语言 时间:
2018-09-11 13:59:30
阅读次数:
144
小朋友学数据结构(4):归并排序 (一)基本思想 归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。 7-1.jpg (二)代码实现 import java.util.Arrays; p ...
分类:
编程语言 时间:
2018-09-08 00:46:49
阅读次数:
238
小朋友学数据结构(11):堆排序 (一)什么是堆 堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]<=key[2i+1]&&Key[i]<=key[2i+2]或者 Key[i]>=Key[2i+1]&&key>=key[2i+2], 即任何一非叶节点的关键字不大于或者不小于其左右孩 ...
分类:
编程语言 时间:
2018-09-08 00:44:52
阅读次数:
205
预备知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。 堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于 ...
分类:
编程语言 时间:
2018-09-07 14:19:09
阅读次数:
167
1、快速排序快速排序是,设定一个基准,从两头出发把小于基准的序列统一在左边,大于基准的序列在右边。时间复杂度:平均O(nlogn)2、冒泡排序冒泡排序是,通过和相邻的元素比较,重复遍历。时间复杂度:O(n^2)3、直接选择排序直接选择排序是一种,把前面无序区最小的元素放到有序区的最后。时间复杂度:O(n^2)4、堆排序堆排序,是一种类似二叉树进行排序的方法,通过升序或者降序,保证父节点比子节点都大
分类:
编程语言 时间:
2018-09-06 20:06:26
阅读次数:
165
题意:给出两组数,第一组数为原始序列,第二组数为经过若干次插入排序或堆排序后的序列,判定到底是属于哪一种排序的结果,然后输出以这种排序的下一次迭代后的序列。 思路:就是练习插入排序和堆排序,没什么好说的。不过有一个小细节,我被扣了2分。见代码。 代码: ...
分类:
其他好文 时间:
2018-09-06 12:41:44
阅读次数:
182
7.1 预备知识 1,算法接收 含元素的数组和包含元素个数的整数 2,基于比较的排序 7.2 插入排序 代码实现 理解描述 位置i上元素存于Tmp中,i之前所有更大的元素向右移一位(i前所有元素已排序),Tmp被置于正确位置。 分析 1,(未排序)嵌套循环每个花费N次迭代,为O(N^2) 2,(已排 ...
分类:
编程语言 时间:
2018-09-02 11:05:18
阅读次数:
187
一.什么是堆? 把数组中的元素之间的关系用一种下标之间的数学关系组成完全二叉树的结构,这种结构偶是逻辑结构,物理结构还是数组 二 数组中元素怎么变为堆结构? 每个元素的下标的i(i-1》/2 为它的父节点位置,每个元素的左节点下标为 (i*2)+1 ,右节点下表为 (i*2)+2 比如给定一个数组 ...
分类:
编程语言 时间:
2018-08-30 15:44:24
阅读次数:
149