堆排序与高速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先解说下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是全然二叉树或者是近似全然二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)不论什么一个子节点的键值。2.每一个结点的左子树和右...
分类:
其他好文 时间:
2014-06-19 07:54:46
阅读次数:
174
堆排序(heapsort)是一种原地(in place)排序算法, 它的时间复杂度是O(nlgn). 堆数据结构不只是在堆排序中有用,它还可以构成一个有效的优先队列。堆数据结构是一种数组对象,它可以被视为一颗完全二叉树。如图: Aheap-size是放在A中堆的元素个数。根据数组节点的索引,我们.....
分类:
其他好文 时间:
2014-06-15 21:27:58
阅读次数:
239
package chap06_Heap_Sort;import static
org.junit.Assert.*;import java.util.ArrayList;import java.util.Arrays;import
org.junit.Test;/** * 优先队列,二叉堆数组实现,...
分类:
其他好文 时间:
2014-06-10 16:40:14
阅读次数:
347
对c语言系统库函数、堆排序、希尔排序、折半插入排序、快速排序消耗时间的比较...
分类:
编程语言 时间:
2014-06-10 15:02:33
阅读次数:
305
以后尽量能用迭代就别用递归啊,递归只是让自己轻松了,但是却增加了电脑的负担。 package
chap06_Heap_Sort;import static org.junit.Assert.*;import java.util.Arrays;import
org.junit.Test;public ...
分类:
其他好文 时间:
2014-06-10 11:57:27
阅读次数:
252
堆排序
// 测试堆排序
// @start:调整的起点
// @end:调整的终点,在堆排序的过程中,不断地减小调整区间,end参数起作用
void SiftDown(int arr[], int start, int end)
{
int i = start;
int j = 2*i + 1; // j记录的是i结点的左孩子
int temp = arr[i];
...
分类:
其他好文 时间:
2014-06-08 16:19:45
阅读次数:
187
排序算法是我们工作中使用最普遍的算法,常见的语言库中基本都会有排序算法的实现,比如c标准库的qsort,stl的sort函数等。本文首先介绍直接插入排序,归并排序,堆排序,快速排序和基数排序等比较排序算法,然后介绍计数排序,基数排序等具有线性时间的排序算法。本文主要讨论算法的实现方法,并不会过多介绍...
分类:
其他好文 时间:
2014-06-07 21:23:31
阅读次数:
348
常用排序算法有以下几种:冒泡排序、插入排序、快速排序、归并排序、堆排序。本文将对五种常用算法分析并实现。//交换两个元素的值 这里列出几种不同写法void
swap(int *a, int *b){ int c = *a; *a = *b; *b = c;}void swap(in...
分类:
其他好文 时间:
2014-06-07 20:30:48
阅读次数:
315
常用的排序算法有冒泡排序,插入排序和选择排序。他们的时间复杂度是o(n²),与数据量的平方成正比。他们的效率还是比较低的。现在来说说他们的效率为什么比较低下。以冒泡排序为例,它每一轮都是与相邻的元素进行交换,交换的距离为1,每次每个(没有冒泡出来的)元素都要与前一个比较再交换。每次相邻的比较只能比较出两个元素的大小,不能以整个数组进行参照来确定在整个数组里的大小,也就是说每次的比较不能确定其他元素...
分类:
其他好文 时间:
2014-06-07 16:16:01
阅读次数:
172