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类; 下面是一个不完整的heap类: #include #ifndef _HEAP_H_ #define _HEAP_H_ using namespace s...

完整堆排序算法

  • 2011年11月30日 14:57
  • 9KB
  • 下载

堆排序的c语言程序供人下载

  • 2011年06月29日 09:32
  • 3KB
  • 下载

堆排序完整版,含注释

#include "stdafx.h" int arrNum[10] = {2,44,3,55,6,77,3,5,222,0xa}; #define LEFT(i) (2 * (i)) #defi...

堆排序示例程序的Java源码

  • 2015年03月22日 14:36
  • 5KB
  • 下载

堆排序的学习示例

  • 2014年07月06日 18:08
  • 5KB
  • 下载

堆排序小根堆 大根堆 迭代 递归 总结 完整代码

http://blog.csdn.net/morewindows/article/details/6709644/

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

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

c++学习连载—随机排序

首先介绍下产生随机数的程序: #include #include #include #define MAX 10 int main() {     int number[MAX]={0}...

八大排序算法及完整c代码—堆排序c、java代码

基本思想:堆排序是一种树形选择排序,是对直接选择排序的有效改进。 堆的定义如下:具有n个元素的序列(h1,h2,...,hn),当且仅当满足(hi>=h2i,hi>=2i+1)或(hi...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c++学习连载-堆排序完整程序
举报原因:
原因补充:

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