堆排序(C++版)
#include <iostream> using namespace std; void HeapAdjust(int* a, int start, int n)
{
int max=start;
int lchild = start*+;
int rchild = start*+;
if(start <= (n-)/){
if(lchild <=n && a[lchild]>a[max]){
max = lchild;
}
if(rchild <=n && a[rchild]>a[max]){
max = rchild;
}
if(max!=start){
swap(a[start], a[max]);
HeapAdjust(a, max, n);
}
}
} void BuildHeap(int* a, int n){ //n: [0,n]
for(int i = (n-)/; i >=;i--){
HeapAdjust(a, i, n);
}
} void HeapSort(int *a,int n)
{
BuildHeap(a,n);
for(int i=n;i>=1;i--)
{
swap(a[],a[i]);
HeapAdjust(a,,i-);
}
} int main(int argc, char *argv[])
{
int a[]={,,,,,,};
BuildHeap(a,);
for(int i=;i<;i++){
cout << a[i] <<endl;
}
cout << "=================" <<endl;
HeapSort(a,);
for(int i=;i<;i++){
cout << a[i] <<endl;
}
return ;
}
堆排序(C++版)的更多相关文章
- 排序算法Java版,以及各自的复杂度,以及由堆排序产生的top K问题
常用的排序算法包括: 冒泡排序:每次在无序队列里将相邻两个数依次进行比较,将小数调换到前面, 逐次比较,直至将最大的数移到最后.最将剩下的N-1个数继续比较,将次大数移至倒数第二.依此规律,直至比较结 ...
- 算法与数据结构(十四) 堆排序 (Swift 3.0版)
上篇博客主要讲了冒泡排序.插入排序.希尔排序以及选择排序.本篇博客就来讲一下堆排序(Heap Sort).看到堆排序这个名字我们就应该知道这种排序方式的特点,就是利用堆来讲我们的序列进行排序.&quo ...
- 数据结构:堆排序 (python版) 小顶堆实现从大到小排序 | 大顶堆实现从小到大排序
#!/usr/bin/env python # -*- coding:utf-8 -*- ''' Author: Minion-Xu 小堆序实现从大到小排序,大堆序实现从小到大排序 重点的地方:小堆序 ...
- 选择排序---堆排序算法(Javascript版)
堆排序分为两个过程: 1.建堆. 堆实质上是完全二叉树,必须满足:树中任一非叶子结点的关键字均不大于(或不小于)其左右孩子(若存在)结点的关键字. 堆分为:大根堆和小根堆,升序排序采用大根堆,降序排序 ...
- 深入浅出数据结构C语言版(19)——堆排序
在介绍优先队列的博文中,我们提到了数据结构二叉堆,并且说明了二叉堆的一个特殊用途--排序,同时给出了其时间复杂度O(N*logN).这个时间界是目前我们看到最好的(使用Sedgewick序列的希尔排序 ...
- 数据结构之排序技术:快速排序、归并排序、堆排序(C++版)
快速排序 #include <iostream> using namespace std; void swap(int num[], int i, int j) { int temp = ...
- 数据结构Java版之堆&堆排序(九)
堆分为大顶堆,和小顶堆. 什么是堆? 堆可以看成是一棵二叉树,二叉树的元素是一个数组不断的从左到右轮训放置.如果是大顶堆,则大的数放上面一层,小的数放下面一层.上一层的数,一定大于下一层的数.小顶堆则 ...
- 堆排序C++实现
/* * heapsort.cpp * * Created on: 2016年3月30日 * Author: Lv_Lang */ //堆排序 #include <iostream> us ...
- 十大经典排序算法总结——JavaScrip版
首先,对于评述算法优劣术语的说明: 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面:即排序后2个相等键值的顺序和排序之前它们的顺序相同 不稳定:如果a原本在b的前面,而a=b,排序之后a ...
随机推荐
- Codeforces Round #257 (Div. 1) (Codeforces 449B)
题意:给力一张无向图,有一些边是正常道路,有一些边是铁路,问最多能删除几条铁路使得所有点到首都(编号为1)的最短路长度不变. 思路:求不能删除的铁路数,总数减掉就是答案.先求出首都到所有点的最短路,求 ...
- lucene 过滤结果
package cn.itcast.h_filter; import java.util.ArrayList; import java.util.List; import org.apache.luc ...
- Memcache 详解
这里收集了经常被问到的关于memcached的问题 一般的问题 什么是memcached? 从哪获得memcached? 怎么安装memcached? 哪些平台可以运行memcached? 什么情况下 ...
- xlistview的(java)
package com.bwie.xlistviews; import java.text.SimpleDateFormat;import java.util.Date; import com.bwi ...
- [安卓]softap
http://www.cnblogs.com/javawebsoa/archive/2013/05/29/3106758.html
- Cygwin下载,安装教程
Cygwin是一个用于在Windows上模拟Linux环境的软件,由于工作上的需要,我要使用它,至于为什么用它,我在这里不做过多的解释,本文的目的,旨在于解决Cygwin安装上的问题. 原始的安装Cy ...
- poj2955 区间dp
//Accepted 200 KB 63 ms //区间dp //dp[i][j] 从i位到j位能得到的最大匹配数 //dp[i][j]=max(dp[i+1][j-1] (s[i-1]==s[j-1 ...
- 高效的iOS宏定义
iOS开发过程中使用一些常用的宏可以提高开发效率,提高代码的重用性:将这些宏放到一个头文件里然后再放到工程中的-Prefix.pch文件中(或者直接放到-Prefix.pch中)直接可以使用,灰常方便 ...
- oracle字符集的查看和修改
Oracle修改字符集2.3oracle数据库的字符集更改 A.oracle server 端 字符集查询 select userenv(‘language’) from dual 其中NLS_CHA ...
- [转] linux中巧用ctrl-z后台运行程序
背景: 最近在执行一些长时间程序的时候,老是一不小心忘了输入‘&’ , 结果终端就卡在那里了,很是郁闷 以前总是再新开一个终端. 今天翻看<鸟哥的linux私房菜>的时候,发现介绍 ...