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 686美团: http://www.itmian4.com/f ... -
面试题汇总
2013-08-30 00:53 7971.题目:给定数组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 2226在vc编程中,经常遇到dsw工程文件无法打开,或者打 ... -
图像编程----如何编写SetTimer的回调函数实现动画效果
2011-09-23 12:53 1427我们一般用到settimer函数的时候,第三个参数一般 ... -
图像编程----如何实现一个透空图片
2011-09-22 16:45 872在mfc中,我们经常碰到的一个情况是,想在界面上添加一个 ... -
字符串的hash
2011-08-23 00:58 0这段时间一直学习hash,总结的片片断断,今天就比较重要的 ... -
qsort总结大全(转)
2011-08-23 00:36 0qsort()排序函数的使用qsort函数应用大全 ...
相关推荐
算法设计课程中的最小堆排序算法实现,windows下实现。
C语言实现的堆排序算法。 提供了堆排序算法的一个接口,可以为其它功能提供功能。
三、堆排序的算法实现 以下是一个简单的C++实现堆排序的例子: ```cpp #include using namespace std; void heapify(int arr[], int n, int i) { int largest = i; // 初始化最大值为根节点 int left = 2 * i ...
Building a heap using heapfying堆排序算法的实现即通过保持堆的特性,建堆,并实现对数组的排序操作。
简单的堆排序算法:以定长数组为例,动态数组等可以以此类推
java的堆排序算法实现程序,含测试,可直接运行。java的堆排序算法实现程序,含测试,可直接运行。
本文的研究重点在于FPGA上堆排序算法的实现与改进,对于FPGA硬件技术及硬件开发领域具有较高的参考价值。通过详细的设计方案和实验结果,为FPGA在复杂信号处理中的应用提供了新的思路和方法。这对于涉及数字信号调制...
堆排序:应用Java和Python分别实现堆排序算法; 堆排序:应用Java和Python分别实现堆排序算法; 堆排序:应用Java和Python分别实现堆排序算法; 堆排序:应用Java和Python分别实现堆排序算法; 堆排序:应用Java和...
在编程环境中,如VC6.0(Visual C++ 6.0),开发者可以编写代码来实现堆排序算法,并通过测试案例验证其正确性。这通常涉及到创建一个堆,调整元素,以及将最大元素(对于大顶堆)移出堆的过程。 描述中提到的...
### c语言实现堆排序算法 堆排序是一种基于比较的排序算法,它利用了二叉堆的数据结构特性来高效地对数据进行排序。堆排序可以分为最大堆和最小堆两种,其中最大堆指的是父节点的值总是大于或等于任意一个子节点的...
3. **完整过程**:堆排序算法通常包含两个阶段,构建堆和交换下沉。首先,通过从最后一个非叶子节点开始,自上而下地调整整个序列,使其成为一个合法的堆。然后,在这个过程中不断交换堆顶元素和末尾元素,每次交换...
本文将深入探讨四种在C++中实现的常见排序算法:插入排序、冒泡排序、堆排序和快速排序。这些算法各有特点,适用于不同的场景,理解并掌握它们对于提升编程能力至关重要。 1. **插入排序**: 插入排序是一种简单的...
1、 实现堆排序算法。 2、 理论分析并实验验证堆排序算法的时间复杂度。
本文将详细介绍C++中实现的希尔排序、快速排序、堆排序和归并排序这四种经典排序算法。 希尔排序,由Donald Shell于1959年提出,是一种改进的插入排序。它的基本思想是通过设置一个增量序列,将待排序的元素按照...
本资源提供了七大经典排序算法的实现程序,包括快速排序、冒泡排序、选择排序、归并排序、插入排序、希尔排序和堆排序。下面将逐一详细介绍这些排序算法及其原理。 1. 快速排序:由C.A.R. Hoare提出,是一种采用...
在这个名为"sort"的压缩包中,很可能包含了实现堆排序算法的C/C++源文件。 堆排序的核心思想是利用树形数据结构——堆(Heap)来完成排序。堆是一个近似完全二叉树的结构,同时满足大顶堆(父节点的值大于或等于其...
本主题将深入探讨四种常见的排序算法:堆排序、快速排序以及两种未在标题中明确提到但同样重要的排序方法——基数排序和计数排序。 首先,让我们详细了解一下堆排序。堆排序是一种基于比较的排序算法,利用了数据...
标题"排序算法之堆排序算法:用C++语言实现堆排序算法",意味着我们将讨论如何用C++编程语言来实现堆排序的过程。C++是面向对象的编程语言,具有丰富的库支持和高效的执行性能,是实现算法的理想选择。 描述"排序...