本文首发于:面试必知必会|理解堆和堆排序微信公众号:后端技术指南针持续输出干货 欢迎关注 惊喜直达! 本文将阐述堆和堆排序的基本原理,通过本文将了解到以下内容: 堆数据结构的定义 堆的数组表示 堆的调整函数 堆排序实践 1.堆的简介 堆是计算机科学中的一种特别的树状数据结构。若是满足以下特性,即可称 ...
分类:
编程语言 时间:
2019-11-20 19:31:13
阅读次数:
110
各种排序算法所需辅助空间 1、 所有的简单排序方法(包括:直接插入、起泡和简单选择)和堆排序的空间复杂度为O(1); 2、 快速排序为O(logn ),为栈所需的辅助空间; 3、 归并排序所需辅助空间最多,其空间复杂度为O(n ); 4、链式基数排序需附设队列首尾指针,则空间复杂度为O(rd )。 ...
分类:
编程语言 时间:
2019-11-16 21:32:40
阅读次数:
74
堆排其实就是选择排序,只不过用了完全二叉树特性。 堆排思想 : 利用完全二叉树特性建堆和重复选择调整来得到有序数组。 完全二叉树有什么特性呢? 节点左对齐 > 层序遍历不会出现空,可以用数组表达(访问效率高) 那么可以将它映射到数组上,并且遵循一个规律: 设i为当前节点索引, i->left = 2 ...
分类:
其他好文 时间:
2019-11-16 17:58:48
阅读次数:
137
冒泡排序: 思路: 1)比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个 2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。 3)针对所有的元素重复以上的步骤,除了最后一个 时间复杂度为(O(n^2))选择排序: 思路: 1)在未排序序列中找到最小(大)元素,存放到排序序列 ...
分类:
编程语言 时间:
2019-11-12 19:57:04
阅读次数:
65
1 #include "pch.h" 2 #include <iostream> 3 #include <cmath> 4 //优先级队列用完全二叉堆实现 5 //使用数组存储某结点i的父结点为(i-1)/2下整,左孩子结点为2*i+1,右孩子结点为2*i+2 6 //二叉堆的上滤操作 7 //大根 ...
分类:
编程语言 时间:
2019-11-12 16:10:32
阅读次数:
104
1 inline int LEFT(int i) 2 { 3 return (i * 2 + 1); 4 } 5 6 inline int RIGHT(int i) 7 { 8 return (i * 2 + 2); 9 } 10 11 void swap(int &i, int &j) 12 { ... ...
分类:
编程语言 时间:
2019-11-11 00:18:36
阅读次数:
101
堆排序 2019-11-10 11:45:11 by冲冲 1、概念 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。 堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子 ...
分类:
编程语言 时间:
2019-11-10 17:42:38
阅读次数:
82
先上代码#include<stdio.h>#include<stdlib.h>voidprintf_array(inta[],intlength){inti=0;printf("arrayelement:\n");for(i=0;i<length;i++){printf("%d\t",a[i]);}printf("\n");}voidperDown(inta[],in
分类:
编程语言 时间:
2019-11-08 22:31:25
阅读次数:
99
排序算法系列博客: 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 计数排序 基数排序 九大排序排序是数据结构体系中最重要的内容之一,这一块必须要非常熟练的掌握,应该做到可以立马写出每个排序的代码,有多种实现方法的必须多种都能很快写出来,当然对各个排序的性能的了解也是基础 ...
分类:
编程语言 时间:
2019-11-04 20:12:41
阅读次数:
133
原文链接:https://www.cnblogs.com/DarrenChan/p/8807112.html 这三个排序的时间复杂度都是O(nlogn),所以这里放到一起说。 回到顶部 1. 快速排序# 快速排序(英语:Quicksort),又称划分交换排序(partition-exchange s ...
分类:
编程语言 时间:
2019-11-02 15:57:28
阅读次数:
116