基本算法如下: 1.插入排序 直接插入排序 折半插入排序 shell排序 2.交换排序 冒泡排序 快速排序 3.选择排序 简单选择排序 树形选择排序 堆排序 4.归并排序 二路归并排序 多路归并排序 5.基数排序 基数排序 ...
分类:
编程语言 时间:
2018-02-03 18:54:35
阅读次数:
171
1.冒泡排序 2.选择排序 3.插入排序 4.快速排序 5.堆排序 6.并归排序 7.希尔排序 8.内置堆模块排序 9.计数排序 ...
分类:
编程语言 时间:
2018-02-02 22:03:23
阅读次数:
207
快速排序: 堆排序: 二叉树: 两种特殊二叉树: 二叉树的存储方式: 小结: 堆排序正题: 向下调整: 堆排序过程: 堆排序-内置模块: 扩展问题topk: 归并排序: 怎么使用: NB三人组小结 ...
分类:
编程语言 时间:
2018-02-01 17:32:14
阅读次数:
131
堆排序中首先需要做的就是建堆,广为人知的是建堆复杂度才O(n),不过很少有人去了解过这个复杂度的证明过程,因为不是那么直观地可以一眼就看出来。 本文不讲堆排序,只单纯讲建堆过程 。 建堆代码 欲了解复杂度的计算过程,必先看懂建堆代码。先看这个建堆过程 // 将arr[n]向上调整至合适位置 void ...
分类:
其他好文 时间:
2018-02-01 14:56:19
阅读次数:
164
1 #include 2 #include 3 using namespace std; 4 5 int partition(vector &arry, int lo, int hi); 6 void qsort(vector &arry, int lo, int hi); 7 void qsort... ...
分类:
编程语言 时间:
2018-01-30 12:49:28
阅读次数:
190
知识点总结报告 知识点: 归并排序 (原理)归并排序是多次将两个或两个以上的有序表合并成一个新的有序表。最简单的归并是直接将两个有序的子表合并成一个有序的表,即二路归并。 二路归并排序基本思路是将R[0..n-1]成是n个长度为1的有序序列,然后进行两两归并,得到|¯n/2¯|个长度为2(最后一个有 ...
分类:
编程语言 时间:
2018-01-28 15:35:13
阅读次数:
150
2.2 堆排序 堆:1. 是完全二叉树;2. 树中所有结点都比左右孩子大(或小)。(但在实现过程发现,其实堆排序并没有用到树结构,还是用的顺序表,只是用完全二叉树来理解而已)。 堆排序是一种选择排序算法,其主要思路是:先将所有待排序元素构造成一个大顶堆(或小顶堆),接着将堆顶元素和最后一个元素(层序 ...
分类:
编程语言 时间:
2018-01-27 19:01:38
阅读次数:
153
#include"stdafx.h"#include<iostream>usingnamespacestd;template<typenameT>voidadjust(T*arr,intsign,intlen){Ttemp=arr[sign];//每一次循环都更新该父节点为根的完全二叉树最大堆for(inti=sign*2+1;i<len;i=i*2+1){if(i+
分类:
编程语言 时间:
2018-01-26 14:03:27
阅读次数:
128
堆排序结合了插入排序和归并排序的有点:它空间复杂度是O(1), 时间复杂度是O(nlgn). 要讲堆排序,先讲数据结构“堆” 堆: 堆是用数组来存放一个完全二叉树的数据结构。假设数组名是A,树的根节点存放在A[1]。它的左孩子存放在A[2],右孩子存放在A[3] 即:对于某个下标位i的节点,它的左孩 ...
分类:
编程语言 时间:
2018-01-23 22:09:21
阅读次数:
219
一、定义 ①堆通常是可被视为完全二叉树的数组。 ②堆中任意节点的数值总是大于或等于其左右子节点,为大根堆。 ③堆中任意节点的数值总是小于或等于其左右子节点,为小根堆。 二、存储 对于任意节点T[i] ①若其父节点存在,为T[(i - 1) / 2] ②若其左兄弟节点存在,为T[i - 1] ③若其右 ...
分类:
编程语言 时间:
2018-01-23 13:05:35
阅读次数:
198