c++学习连载-堆排序完整程序

原创 2013年12月06日 10:46:41
#include <iostream>

#ifndef _HEAP_H_
#define _HEAP_H_

using namespace std;
class heap
{
public:
    heap()
    {
    }
    int HeapPar(int i)
    {
        return i/2;
    }
    int HeapLeft(int i)
    {
        return 2*i;
    }
    int HeapRight(int i)
    {
        return 2*i+1;
    }
    template <class T>

    int getArrayLen(T& array)

    {//使用模板定义一个函数getArrayLen,该函数将返回数组array的长度

    return (sizeof(array) / sizeof(array[0]));

    }
    void InHeat(int A[]);
    void MaxHeapify(int i);
    void BuildMapHeap();
    int* Pheap;
    int HeapSize;
    ~heap()
    {
    }
};

#endif


#include"heap.h"
void heap::BuildMapHeap()
{
    for(int i=heap::HeapSize/2;i>=1;i--)
    {
        heap::MaxHeapify(i);
    }
}

#include"heap.h"
void heap::InHeat(int A[])
{
//    HeapSize=getArrayLen(A);
    Pheap=A;
}


#include"heap.h"
void heap::MaxHeapify(int i)
{
    int l,r,largest;
    int temp;
    l=HeapLeft(i);
    r=HeapRight(i);
    if((l<=HeapSize)&&(Pheap[l-1]>Pheap[i-1]))
    {
        largest=l;
    }
    else
    {
        largest=i;
    }
    if((r<=HeapSize)&&(Pheap[r-1]>Pheap[largest-1]))
    {
        largest=r;
    }
    if(largest!=i)
    {
        temp=Pheap[i-1];
        Pheap[i-1]=Pheap[largest-1];
        Pheap[largest-1]=temp;
        heap::MaxHeapify(largest);
    }
}


#include"heap.h"
#include<iostream>
using namespace std;
void HeapSort(heap& B)
{
    B.BuildMapHeap();
    int i;
    int int_tem;
    for(i=B.HeapSize;i>=2;i--)
    {
        int_tem=B.Pheap[0];
        B.Pheap[0]=B.Pheap[i-1];
        B.Pheap[i-1]=int_tem;
        B.HeapSize--;
        B.MaxHeapify(1);
    }
}


#include<iostream>
#include"heap.h"
#include"heapsort.h"

using namespace std;

int main()
{
    int arry[]={5,13,2,25,7,17,20,8,4};
    int i=0;
    cout<<"the original array:"<<endl;
    for(;i<9;i++)
    {
        cout<<arry[i]<<"  ";
    }
    cout<<endl;
    heap B;
    B.InHeat(arry);
    B.HeapSize=9;
    HeapSort(B);
    cout<<"the sorted arry:"<<endl;
    for(i=0;i<9;i++)
    {
        cout<<B.Pheap[i]<<"  ";
    }
    cout<<endl;
    return 0;
}

程序测试结果:


c++实现堆排序

在程序设计相关领域,堆(Heap)的概念主要涉及到两个方面: 一种数据结构,逻辑上是一颗完全二叉树,存储上是一个数组对象(二叉堆)。垃圾收集存储区,是软件系统可以编程的内存区域。 本文所说...
  • jx232515
  • jx232515
  • 2016年05月31日 21:31
  • 4851

三种排序算法(归并排序、快速排序,堆排序)

归并排序 快速排序 堆排序 java实现
  • stephenxe
  • stephenxe
  • 2016年07月18日 18:40
  • 2155

创建堆,堆排序的详细实现过程,C++完整代码

堆的基本概念不在此介绍,各位看官自行百度。由于堆的特性导致堆可以用数组进行模拟,所以堆排序其实是在数组(即堆)上进行排序的过程,在所有堆的操作中,都离不开一个操作:调整堆,该过程使堆保持堆的性质(大堆...
  • ahfytao
  • ahfytao
  • 2015年08月15日 13:59
  • 1251

堆排序原理及其实现(C++)

堆排序原理及其实现(C++)1 堆排序的引入 我们知道`简单选择排序`的时间复杂度为O(n^2),熟悉各种排序算法的朋友都知道,这个时间复杂度是很大的,所以怎样减小简单选择排序的时间复杂度呢?从上...
  • yanglr2010
  • yanglr2010
  • 2016年10月18日 21:48
  • 2841

c++学习连载-堆排序学习及遇到问题

我首先写了一个heap类; 下面是一个不完整的heap类: #include #ifndef _HEAP_H_ #define _HEAP_H_ using namespace s...
  • hitflame
  • hitflame
  • 2013年12月04日 11:25
  • 322

C++ 堆排序算法的实现与改进(含笔试面试题)

堆排序(Heap sort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以用到上一次的...
  • misayaaaaa
  • misayaaaaa
  • 2017年03月31日 09:21
  • 1527

C++模板堆排序

堆排序简介堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。...
  • zhangxiao93
  • zhangxiao93
  • 2016年03月27日 15:28
  • 597

《算法导论》之堆排序学习心得

今天学习了《算法导论》第六章的堆排序,之前有人问我对
  • shiyanwei1989
  • shiyanwei1989
  • 2014年04月15日 20:18
  • 616

C++代码,数据结构-内部排序-选择排序-堆排序

最简单的选择排序,的时间复杂度为N2;其主要操作就是比较,从减少次数出发来改进算法,书上提到了树形选择排序,但是有需要的辅助空间较多等缺点,为了弥补,威洛姆斯提出了另一种形式的选择排序——堆排序, ...
  • y519476132
  • y519476132
  • 2014年03月14日 21:35
  • 751

c++手动和STL实现堆排序

好久没看最小堆和最大堆了
  • yezizp
  • yezizp
  • 2014年07月02日 17:08
  • 553
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c++学习连载-堆排序完整程序
举报原因:
原因补充:

(最多只允许输入30个字)