插入排序:稳定 时间复杂度:最坏情况 O(n^2) 最好 O(n) 平均 O(n^2) 空间复杂度:O(1) 1 public void insertSort(int[] arr){ 2 int n = arr.length; 3 for(int i =1;i<n;i++) 4 { 5 int va ...
分类:
编程语言 时间:
2020-01-10 20:46:07
阅读次数:
109
一、快速排序算法步骤: 1. 在数组中选一个基准数(通常为数组第一个); 2. 将数组中小于基准数的数据移到基准数左边,大于基准数的移到右边; 3. 对于基准数左、右两边的数组,不断重复以上两个过程,直到每个子集只有一个元素,即为全部有序。 实例演示 1、将第一个元素49设置为基准,low=0,hi ...
分类:
编程语言 时间:
2020-01-10 18:30:13
阅读次数:
85
优先级队列的底层实现是堆(最大堆、最小堆) 堆的特点 1. 完全二叉树 2. 每个节点的值都必须大于等于或小于等于子树中节点的值(对应最大堆、最小堆) 3. 往堆中插入和删除一个元素的时间复杂度都是O(logn) 一、实现 最大堆和最小堆实现原理基本一样,下面实现一个最大堆 输出 二、堆排序 1.每 ...
分类:
其他好文 时间:
2020-01-07 14:44:07
阅读次数:
81
①维护堆的性质,max_heapify通过让A[i]的值在最大堆中“逐级下降”,从而使得下标i为根节点的子树重新遵循最大堆性质。 void max_heapify(int A[], int i) { int left = 2 * i; int right = 2 * i + 1; int large ...
分类:
编程语言 时间:
2020-01-07 01:02:59
阅读次数:
89
堆排序(Heap Sort)是指利用堆这种数据结构所设计的一种排序算法。因此,学习堆排序之前,有必要了解堆! 我们知道,堆分为"最大堆"和"最小堆"。最大堆通常被用来进行"升序"排序,而最小堆通常被用来进行"降序"排序。鉴于最大堆和最小堆是对称关系,理解其中一种即可。本文将对最大堆实现的升序排序进行 ...
分类:
编程语言 时间:
2020-01-04 22:29:55
阅读次数:
93
序言 二叉堆本质上是一种完全二叉树, 它分为两个类型。 1. 最大堆 2. 最小堆 最大堆 什么是最大堆呢? 最大堆的任何一个父节点的值, 都大于或等于它左、 右孩子节点的值。 最小堆 什么是最小堆呢? 最小堆的任何一个父节点的值, 都小于或等于它左、 右孩子节点的值。 二叉堆的根节点叫作堆顶。最大 ...
分类:
其他好文 时间:
2020-01-03 00:39:23
阅读次数:
76
前言: 排序算法是我们编程中遇到的最多的算法。目前主流的算法有8种。 平均时间复杂度从高到低依次是: 冒泡排序(o(n2)),选择排序(o(n2)),插入排序(o(n2)),堆排序(o(nlogn)), 归并排序(o(nlogn)),快速排序(o(nlogn)), 希尔排序(o(n1.25)),基数 ...
分类:
编程语言 时间:
2019-12-26 00:01:35
阅读次数:
88
堆排序终于搞明白了,我知道过几天肯定会忘,希望这篇文章和代码能让我快速回忆起。 堆排序的思想就是,构造一个大顶堆或者小顶堆,然后把堆顶元素换到末尾,调整堆,重复。把过程分解为两步,第一步:建堆。第二步:排序。 大顶堆对应升序;小顶堆为降序。 代码如下: package heap; /* * 堆排序 ...
分类:
编程语言 时间:
2019-12-25 02:00:34
阅读次数:
85
数据结构书籍与算法书(包括 "算法导论" 、 "算法设计" )通常将优先队列(Priority Queue)与堆(Heap)放在一起讲,算法导论上先讲堆这个特殊的数据结构,后讲堆的两个应用,堆排序与优先队列。算法设计这本书先讲优先队列是个什么样的数据结构,有什么性质,为什么需要优先队列这种数据结构, ...
分类:
其他好文 时间:
2019-12-22 00:19:43
阅读次数:
145
#include<iostream> #include<cstdlib> #include<stack> #include<string> #include<vector> using namespace std; void HeapAdjust(vector<int> &A, int beginI ...
分类:
编程语言 时间:
2019-12-21 20:55:52
阅读次数:
69