排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基于比较的内...
分类:
编程语言 时间:
2015-12-14 18:54:42
阅读次数:
881
堆排序 不仅在排序上有较好的时间复杂度,同时最大堆,最小堆在解决top10等问题上有很好的效果。最大堆性质,除了根以为的所有结点i都要满足: A[parent(i)]>=A[i]即,子节点一定小于等于父节点,且任意子树也满足该性质。Max-Heapify是维持最大堆性质的关键。时间复杂度O(lg.....
分类:
编程语言 时间:
2015-12-12 00:03:19
阅读次数:
199
冒泡排序 1 //冒泡排序 2 ////////////////////////////////////////////////////////////////////////// 3 void BubleSort(int a[],int n) 4 { 5 int temp; 6 ...
分类:
编程语言 时间:
2015-12-10 13:01:26
阅读次数:
261
1.从时间复杂度比较 从平均时间复杂度来考虑,直接插入排序、冒泡排序、直接选择排序是三种简单的排序方法,时间复杂度都为O(n2),而快速排序、堆排序、二路归并排序的时间复杂度都为O(nlog2n),希尔排序的复杂度介于这两者之间。若从最好的时间复杂度考虑,则直接插入排序和冒泡排序的时间复杂度最好,....
分类:
编程语言 时间:
2015-12-05 23:58:35
阅读次数:
471
详解:http://www.ahalei.com/thread-5028-1-2.html 1 //删除堆顶之后把最后一个移到堆顶在调整,慢 2 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 9 ...
分类:
编程语言 时间:
2015-12-05 22:30:49
阅读次数:
305
1 #include "iostream" 2 #include "iomanip" 3 #include "time.h" 4 using namespace std; 5 6 #define num 28 7 typedef int type;//type类型为int 8 9 /*10 *...
分类:
编程语言 时间:
2015-12-04 12:38:37
阅读次数:
235
堆排序 堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。既然是堆排序,自然需要先建立一个堆,而建堆的核心内容是调整堆,使二叉树满....
分类:
编程语言 时间:
2015-12-03 11:33:12
阅读次数:
244
本文是针对[数据结构基础系列(9):排序]的实践项目。【项目 - 大数据集上排序算法性能的体验】
设计一个函数,产生一个至少5万条记录的数据集合。在同一数据集上,用直接插入排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序等算法进行排序,记录所需要的时间,经过对比,得到对复杂度不同的各种算法在运行时间方面的感性认识。
提示1:这一项目需要整合多种排序算法,可以考虑先建设排序算法...
分类:
编程语言 时间:
2015-12-01 12:55:39
阅读次数:
207
思想:1.构建最大堆2.把根节点和最后一个节点交换,,把堆长度-1,也就不考虑放最后的最大的元素了,再构建最大堆3.现在第二大的元素在根节点了,我们再重复步骤2,直到堆长度为1int MaxHeap(int DataArray[],int Father,int DataLen){ int Le...
分类:
编程语言 时间:
2015-11-29 15:01:16
阅读次数:
155
我们可以把任意优先队列变成一种排序方法。将所有元素插入一个查找最小元素的优先队列,然后再重复调用删除最小元素的操作来将它们按顺序删去。用无序数组实现的优先队列这么做相当于进行一次插入排序。用基于堆的优先队列这样做等同于哪种排序?一种全新的排序方法!下面我们就用堆来实现一种经典而优雅的排序算法——堆排...
分类:
编程语言 时间:
2015-11-23 13:32:34
阅读次数:
167