1.堆排序. 平均复杂度,最坏复杂度都是nlogn
#include <iostream> using namespace std; //获得父结点,从0开始 #define get_Parent(i) ( (i+1) >> 1 -1) //获得左孩子节点 #define get_LeftChild(i) ( (i+1) << 1 -1) //获得右孩子节点 #define get_RightChild(i) ( (i+1) <<1 ) int DATALEN = 10 ;//定义待排序的数据长度 //保持堆的性质 //A表示记录数据的数组,i表示坐标为i的结点 void keep_MaxHeap( int* A , int i ) { int l = get_LeftChild(i); //获得左右孩子 int r = get_RightChild(i); //比较根节点与孩子节点的大小 int largest = i; //保存最大值 if ( l < DATALEN && A[l] > A[i] ) //左孩子 { largest = l; } else largest = i; if ( r < DATALEN && A[r] > A[largest] ) //右孩子 { largest = r; } if ( largest != i) //如果有改变,则会影响整个子树的结构,应该递归调整 { //先互换 int temp = A[i]; A[i] = A[largest]; A[largest] = temp; keep_MaxHeap(A,largest);//调整以largest为根的子树 } return ; } //建立最大堆 //以 DATALEN/2 到 根部不断跟新 void build_MaxHeap(int* A) { for(int i = (DATALEN/2 - 1); i>=0 ; --i ) keep_MaxHeap(A,i); //维护最大堆 return ; } //堆排序 //方法就是,先建立一个最大堆 //然后将头结点元素与,最后一个一个节点互换 //直到倒数第二个 void heap_Sort(int* A) { DATALEN = 10; //在这儿可以更新数组长度,默认为10 //先建一个最大堆 build_MaxHeap(A); //不断缩小数组大小,建立最大堆 for ( int i=DATALEN-1; i>=1; --i ) { //交换最大值与数组最后一个数字 int temp = A[0]; A[0] = A[DATALEN-1]; A[DATALEN-1] = temp; DATALEN-- ; //数组大小又小了一个,因为已经又找到一个最大值放到了后面 keep_MaxHeap(A,0); } } int main(void) { int A[10] = {3,4,2,5,6,2,8,7,9,10}; heap_Sort(A); cout<<A[0]<<endl; return 0; }
发表评论
-
QQ中杂七杂八的调用点
2016-03-28 20:52 0QQ中的API调用太多了,在这里做一个记录,方便以 ... -
截图代码
2015-02-11 19:47 0#include "utility.h" ... -
各类公司2014笔试题
2013-09-17 09:33 654美团: http://www.itmian4.com/f ... -
面试题汇总
2013-08-30 00:53 7391.题目:给定数组A,大小为n,数组元素为0到n-1的数字 ... -
非递归、仅用一个栈、不加标记数组实现二叉树的后序遍历算法
2013-08-18 23:55 0http://www.cnblogs.com/fin ... -
球称重问题
2013-07-28 22:47 0一般的问题是,如果明确次品球是重或轻,可以直接利用公式 ... -
随机概率相关面试题详解
2013-05-15 10:46 01. 已知有个rand7()的函数,返回1到7随机 ... -
csdn------屌丝们的欢乐算法题
2013-03-08 21:34 01. 1 2 3 ... -
贪心算法---基础篇
2012-08-26 13:20 0理论部分 贪 ... -
计算几何-----判断一个点是否在多边形内
2012-08-20 15:01 0如何判断点在多 ... -
大整数相关运算
2012-08-20 13:52 0既然这是我的暑假任务,那么不管怎样一定要按计划完成了! ... -
编程之美---寻找发帖水王(含扩展问题)
2012-08-19 10:11 0题目:Tango是微软亚洲 ... -
编程之美-----2.21只考加法的面试题
2012-08-12 19:59 0http://www.cnblogs.com/flyinghe ... -
前序+中序==>后序 && 后序+中序==>前序
2012-08-12 09:49 0一. 前序 + 中序 -> 后序 分析: ... -
DE算法学习
2012-08-07 12:38 0DE(差分演化算法) 理论: 这部分内容直接参 ... -
vc---工程打不开问题解决(转载)
2012-07-07 15:03 2170在vc编程中,经常遇到dsw工程文件无法打开,或者打 ... -
图像编程----如何编写SetTimer的回调函数实现动画效果
2011-09-23 12:53 1363我们一般用到settimer函数的时候,第三个参数一般 ... -
图像编程----如何实现一个透空图片
2011-09-22 16:45 810在mfc中,我们经常碰到的一个情况是,想在界面上添加一个 ... -
字符串的hash
2011-08-23 00:58 0这段时间一直学习hash,总结的片片断断,今天就比较重要的 ... -
qsort总结大全(转)
2011-08-23 00:36 0qsort()排序函数的使用qsort函数应用大全 ...
相关推荐
算法设计课程中的最小堆排序算法实现,windows下实现。
自己编写的堆排序算法实现函数,本人亲测过绝对好使的代码,在这里与大家分享交流,希望能够给你带来帮助
C语言实现的堆排序算法。 提供了堆排序算法的一个接口,可以为其它功能提供功能。
基于FPGA的堆排序算法实现与改进.pdf
Building a heap using heapfying堆排序算法的实现即通过保持堆的特性,建堆,并实现对数组的排序操作。
简单的堆排序算法:以定长数组为例,动态数组等可以以此类推
java的堆排序算法实现程序,含测试,可直接运行。java的堆排序算法实现程序,含测试,可直接运行。
用c语言实现堆排序算法,堆排序算法的实现,分析堆排序算法
包括堆排序算法实现,直接插入排序算法实现和快速排序算法实现。
1、 实现堆排序算法。 2、 理论分析并实验验证堆排序算法的时间复杂度。
7大排序算法(快速排序,冒泡排序,选择排序,归并排序,插入排序,希尔排序,堆排序)实现源码
内部堆排序算法的实现课程设计说明书.doc
解决算法中求若干个数的前N位,堆排序是最佳选择。
// 堆排序 #include typedef int InfoType; // 定义其它数据项的类型 #include "compare.h" #include "sort.h" typedef SqList HeapType; // 堆采用顺序表存储表示 void HeapAdjust(HeapType &H,int s,int m) // ...
学习堆排序时自己编的代码,里面有自动生成随机数的代码段方便大家测试
C++实现希尔、快速、堆排序、归并排序算法,一些中文注释可能成乱码了,但是不影响代码执行。
使用C语言编写的数据结构程序,为堆排序算法的实现。可作为课程设计题目来做。
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。 堆排序的平均时间复杂度为Ο...