八大排序对比(转)排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:...
分类:
编程语言 时间:
2015-05-03 17:25:25
阅读次数:
224
// HeapSort.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include
#define LIST_MAX_SIZE 100
//顺序表
struct sqList{
int base[LIST_MAX_SIZE];
int len;
};
typedef sqList Heap;//顺序表作为堆排序的基本类型
//初始化顺序表
...
分类:
编程语言 时间:
2015-05-03 09:19:53
阅读次数:
146
关于堆排序的一些基本定义可参见我转载的另一篇博文。http://blog.csdn.net/u010275850/article/details/45311661
其实在学习堆的时候细心的同学就可以发现,只要依次保存删除操作的数据,就可以得到一个有序的序列。堆排序也是利用了这样的思想。
算法实现:
/*根据最大堆实现的堆排序*/
#include
#define LeftChild(i)...
分类:
编程语言 时间:
2015-04-29 11:43:14
阅读次数:
136
堆就是一个完全二叉树,堆要求是指 该节点大于它的两个子节点。而两个字节点大小不一定。堆排序的最坏时间复杂度为nlog(n),平均也为nlog(n),占用空间为o(1),是一种比较排序算法。堆排序也可以用于找最大的k个数。时间复杂度为klog(n),因为建堆后,每次循环实际上都生成一个最大数。下面见代...
分类:
编程语言 时间:
2015-04-28 11:16:36
阅读次数:
161
每次 从待排序序列中选择出一个最大(或者最小)的记录添加到有序序列的后面即为选择排序。 选择排序主要有:简单选择排序、树形选择排序、堆排序。1、简单选择排序基本思路:重复进行n趟选择,第i趟通过n-i次记录的比较,在n-i+1个记录中选取最小(或最大)的记录与第i个记录进行交换。void se...
分类:
编程语言 时间:
2015-04-28 08:16:43
阅读次数:
120
1.归并排序
void merge(int *result, int begin, int mid, int end, int *temp)
{
int k = begin;
int i = begin;
int j = mid + 1;
while (i <= mid&&j <= end){
temp[k++] = result[i] < result[j] ? result[i+...
分类:
编程语言 时间:
2015-04-27 20:09:43
阅读次数:
155
1 package sorting; 2 3 /** 4 * 堆排序 5 * 平均O(nlogn),最好O(nlogn),最坏O(nlogn);空间复杂度O(1);不稳定;较复杂 6 * @author zeng 7 * 8 */ 9 public class DuiPaixu {10...
分类:
编程语言 时间:
2015-04-25 22:32:39
阅读次数:
199
常见经典排序算法1.希尔排序n的1.2次幂 不稳定2.二分插入法3.直接插入法O(n*n)稳定4.带哨兵的直接排序法5.冒泡排序O(n*n)稳定6.选择排序O(n*n)不稳定7.快速排序log2(n)*n不稳定8.堆排序log2(n)*n不稳定归并排序:log2(n)*n稳定一.希尔(Shell)排...
分类:
编程语言 时间:
2015-04-25 16:34:17
阅读次数:
178
/*
建议先看堆调整方法,堆调整了解了,整个排序算法就算掌握了
*/
- (void)viewDidLoad
{
[super viewDidLoad];
/*
测试数据
*/
NSArray *array=@[@3,@2,@6,@4,@1,@0,@6,@7,@5];
NSMutableAr...
分类:
编程语言 时间:
2015-04-24 09:12:05
阅读次数:
122
/*
* 堆的性质(最小堆为例):
* 0.根节点为最小值
* 1.堆可以看做是一个完全二叉树(即孩子节点从左向右排列)
* 2.堆的高度lgn/lg2(n为节点的数目)
* 3.第i节点的左孩子节点是2*i+1,右孩子节点为2*i+2
* 4.以任意一个节点作为根节点,那么该节点都是堆
* 5.可以用一个数据来表示堆
*/
/*
* 构建堆的原理:
* 上滤
* 在最后一个节点后建立一个空节点...
分类:
编程语言 时间:
2015-04-23 21:47:50
阅读次数:
182