排序算法 常用排序算法的特点 常用排序法的时间复杂度和空间复杂度 插入排序(直接插入,希尔排序) 选择排序(‘简单选择排序,堆排序’) 交换排序(冒泡排序,快速排序) 归并排序 基数排序 直接插入排序 首先以第一个数字开始,每次选择,已排序数据中的后面一个数据插入到以排序数据中 希尔排序 跳跃性的选 ...
分类:
编程语言 时间:
2016-09-17 20:33:32
阅读次数:
160
堆是完全二叉树 排序之前,首先要建立一个堆,比如给定一个数组[1,3,5,6,2,4,8,6,9],建立二叉树如下: 对排序分为大顶堆和小顶堆 大顶堆:父节点的关键字>=左右孩子节点的关键字 小顶堆:父节点的关键字<=左右孩子节点的关键字 以大顶堆为例,对上述完全二叉树进行堆排序 从最后一个非叶结点 ...
分类:
编程语言 时间:
2016-09-17 12:09:39
阅读次数:
206
主要实现了冒泡排序、堆排序、归并排序、快速排序。其中归并排序、快速排序运用了递归算法。 冒泡排序:主要是用了双重循环,第一层循环控制整个排序的步长,第层循环在大于第一层循环的基础上从顺序表末端依次比较,将最小或者最大的数排到当前起一层循环的开始处。 堆排序 堆是具有下列性质的完全二叉树:每个节点的值 ...
分类:
编程语言 时间:
2016-09-16 21:12:59
阅读次数:
231
堆是完全二叉树的结构,因此对于一个有n个节点的堆,高度为O(logn)。 最大堆:堆中的最大元素存放在根节点的位置。 除了根节点,其他每个节点的值最多与其父节点的值一样大。也就是任意一个子树中包含的所有节点的值都不大于树根节点的值。 堆中节点的位置编号都是确定的,根节点编号为1,每一层从左到右依次编 ...
分类:
编程语言 时间:
2016-09-16 18:12:31
阅读次数:
261
【本文谢绝转载,原文来自http://990487026.blog.51cto.com】排序算法 平均复杂度冒泡排序O(n2)选择排序 O(n2)插入排序 O(n2)希尔排序 O(n1.5)快速排序O(N*logN)归并排序 O(N*logN)堆排序 O(N*logN)基数排序 O(d(n+r))选择排序:chunli@http://990487026.blog.51cto.com~/sort$c..
分类:
编程语言 时间:
2016-09-16 00:25:46
阅读次数:
282
[COJ6024]合并果子·改(强化版) 试题描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多把这些果子堆排成一排,然后所有的果子合成一堆。 每一次合并,多多可以把相邻两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n-1次合并 ...
分类:
其他好文 时间:
2016-09-14 16:54:05
阅读次数:
118
一:堆排序 堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的非降序排序... ...
分类:
其他好文 时间:
2016-09-12 23:59:49
阅读次数:
366
稳定算法: 直接插入排序、折半插入排序、冒泡排序、归并排序 不稳定算法: 希尔排序、快速排序、简单选择排序、堆排序 直接插入排序(从原位置在有序部分逐次比较找到最终位置插入) void InsertSort(ElemType A[], int n) { int i, j; for( i = 2, i ...
分类:
编程语言 时间:
2016-09-11 18:54:29
阅读次数:
216
一.什么是归并排序 归并排序就是将多个有序的数据段合成一个有序的数据段,如果参与合并的只有两个有序的数据段,则称为二路归并。与快速排序和堆排序相比,其最大的特点是一种稳定的算法,算法的平均时间复杂度O(nlog2n)。 二.归并排序的基本思路 (1).对于一个原始的待排序表,可以将R[1]到R[n] ...
分类:
编程语言 时间:
2016-09-10 19:13:22
阅读次数:
327