对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
堆排的灵感源自于堆的数据结构。它是一种原地排序算法,不需要额外的临时数组。
基本思想
堆排的基本思想是:
先建立一个最大堆
将最大的元素移动到数组末尾,减小堆的大小,调整最大堆使其符合最大堆的性质
重复第二步,直到最大堆耗尽为止
第一个步骤建立最大堆的代码非常简单,只要对每个节点执行sink操作即可。
...
分类:
其他好文 时间:
2014-06-10 06:55:08
阅读次数:
295
堆排序
// 测试堆排序
// @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
继上一篇堆排序之后,用相同的数据结构写了个快速排序和插入排序,当数组的长度较小的时候,可使用插入排序,实现如下:QuickSort.h 1 #ifndef
__QUICKSORT 2 #define __QUICKSORT 3 #include "MySqList.h" 4 #include "In...
分类:
其他好文 时间:
2014-06-06 10:50:30
阅读次数:
282
堆是一个完全二叉树,树中每个结点对应于原始数据的一个记录,并且每个结点应满足以下条件:非叶结点的数据大于或等于其左、右孩子结点的数据(若是按从大到小的顺序排序,则要求非叶结点的数据小于或等于其左、右孩子结点的数据)。由堆的定义可看出,其根结点为最大值,堆排序就是利用这一特点进行的。堆排序过程包括.....
分类:
其他好文 时间:
2014-06-02 21:00:35
阅读次数:
257
9.4选择类排序法选择排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。我们主要介绍简单选择排序、树型选择排序和堆排序。简单选择排序简单选择排序的基本思想:第i趟简单选择排序是指通过n-i次关键字的比较,从n-i+1个记录中选出关键字最...
分类:
其他好文 时间:
2014-06-02 01:42:56
阅读次数:
256