题目:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。 除了基于优先队列,时间复杂度为O(nlogk)、堆排序,时间复杂度为O(nlogk)、partition函数,时间复杂度为O(n)的解法之外,还有基于冒泡排序的解法时间复 ...
分类:
编程语言 时间:
2017-11-09 22:48:19
阅读次数:
222
基本思想: 图示: (88,85,83,73,72,60,57,48,42,6) 平均时间复杂度: O(NlogN)由于每次重新恢复堆的时间复杂度为O(logN),共N - 1次重新恢复堆操作,再加上前面建立堆时N / 2次向下调整,每次调整时间复杂度也为O(logN)。二次操作时间相加还是O(N ...
分类:
编程语言 时间:
2017-11-09 22:44:59
阅读次数:
261
预备知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。 堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于 ...
分类:
编程语言 时间:
2017-11-08 00:52:27
阅读次数:
314
package algorithm; public class LargeHeapSort { /** * 对数组进行调整,使得arr[low]成为low-len最大的 * @param arr * @param low 当前二叉树(堆的一部分)的根 * @param len 数组的长度 */ pu... ...
分类:
编程语言 时间:
2017-11-04 13:18:49
阅读次数:
188
#include <stdio.h> #include <stdlib.h> //堆调整,构建大顶堆,arr[]是待调整的数组,i是待调整的数组 //元素的位置,length是数组的长度 void HeapAdjust(int arr[], int i, int length) { int Chil ...
分类:
编程语言 时间:
2017-11-02 23:20:01
阅读次数:
430
/* */ /* 知识点: */ #include #include #include #include #include #include using namespace std; #define MAXN 1005 class heap_sort { private: public: void ... ...
分类:
编程语言 时间:
2017-11-01 01:04:25
阅读次数:
219
概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 我们这里说的八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基 ...
分类:
编程语言 时间:
2017-10-29 17:32:24
阅读次数:
216
原文:什么是“堆”,"栈","堆栈","队列",它们的区别 堆:什么是堆?又该怎么理解呢? ①堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质: ·堆中某个节点的值总是不大于或不小于其父节点的值; ·堆总是一棵完全二叉树。 将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根 ...
分类:
其他好文 时间:
2017-10-29 12:44:46
阅读次数:
104
核心代码 算法分析: 最好时间复杂度:O(nlog2(n)) 平均时间复杂度:O(nlog2(n)) 最坏时间复杂度:O(nlog2(n)) 空间复杂度:O(1) 稳定性:不稳定 ...
分类:
编程语言 时间:
2017-10-27 20:39:09
阅读次数:
195