插入排序:直接插入,希尔排序选择排序:选择排序,堆排序交换排序:冒泡排序,快速排序归并排序:归并排序#include<iostream>
#include<assert.h>
usingnamespacestd;
voidInsertSort(int*arr,size_tsize)
{
assert(arr);
for(inti=0;i<size-1;++i)
{
int..
分类:
编程语言 时间:
2016-03-26 08:58:47
阅读次数:
184
堆排序的要点在于构建一个最大推或者最小堆。那么什么是最大堆、最小堆呢?
概念介绍
二叉堆:二叉堆是一棵完全二叉树
二叉堆的性质:
1、二叉堆的父节点的键值总是大于或者等于(小于或者等于)子节点的键值
2、当父节点的键值大于或者等于子节点的键值时为最大堆,当父节点的键值小于或者等于子节点时时最小堆
3、通常对于给定的结点i可以根据在数组中的位置求出其父节点的位置、左右子节点的位置,对于下...
分类:
编程语言 时间:
2016-03-26 07:47:01
阅读次数:
147
趁着有时间把学习过的排序算法又实现了一遍复习一下,实现的排序算法主要有以下几种:冒泡排序、快速排序,选择排序,堆排序,插入排序,合并排序,希尔排序,桶排序等。 下面是网上找的一张图片,总结了常见排序算法的时间复杂度、空间复杂度以及稳定性,可以参考一下。 下面排序的都是vector<int>,懒得写模
分类:
编程语言 时间:
2016-03-21 01:40:06
阅读次数:
336
对于一个int数组,请编写一个堆排序算法,对数组元素排序。
给定一个int数组A及数组的大小n,请返回排序后的数组。
测试样例:
[1,2,3,5,2,3],6
[1,2,2,3,3,5]
class HeapSort {
public:
int* heapSort(int* A, int n) {
BuildMaxHeap(A, n)...
分类:
编程语言 时间:
2016-03-20 21:36:34
阅读次数:
330
#pragmaonce
#include<iostream>
#include<vector>
usingnamespacestd;
classBigHeap//仿函数类大堆返回true
{
public:
booloperator()()
{
returntrue;
}
};
classSmallHeap//仿函数类小堆返回false
{
public:
booloperator()()
{
returnfalse;
}
};..
分类:
编程语言 时间:
2016-03-20 18:08:38
阅读次数:
197
堆排序是一种树形选择排序,是对直接选择排序的有效改进。 基本思想: 堆的定义如下:具有n个元素的序列(k1,k2,...,kn),当且仅当满足 时称之为堆。由堆的定义可以看出,堆顶元素(即第一个元素)必为最小项(小顶堆)。 若以一维数组存储一个堆,则堆对应一棵完全二叉树,且所有非叶结点的值均不大于(
分类:
编程语言 时间:
2016-03-18 21:36:13
阅读次数:
200
堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。 二叉堆是完全二叉树或者是近似完全二叉树。 二叉堆满足二个特性: 1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。 2.每个结点的左子树和右子树都是一
分类:
编程语言 时间:
2016-03-16 09:37:11
阅读次数:
239
百度百科的堆排序竟然没有PHP版本的,作为世界上“最”好的语言,这太掉份了,于是我帮它补上。
分类:
编程语言 时间:
2016-03-14 00:03:40
阅读次数:
314
摘自:《啊哈算法》 我们要用1, 2, 5, 12, 7, 17, 25, 19, 36, 99, 22, 28, 46, 92来建立最小堆,并且删除最小的数,并增加一个数23 如何建立这个堆: //建堆 n = 0; for (int i = 1; i <= m; i++) { n++; h[n]
分类:
编程语言 时间:
2016-03-10 10:52:26
阅读次数:
209
1.冒泡排序: (1)比较相邻的元素。如果第一个比第二个大,就交换他们两个。 (2)外面再套个循环就行。 算法复杂度:O(N2) 不罗嗦,上代码: //冒泡排序(两两交换,外加一个外循环) public static void bubbleSort(int sortData[]){ int i,j,
分类:
编程语言 时间:
2016-03-07 16:26:57
阅读次数:
162