堆排序_Heap Sort

来源:互联网 发布:scratch趣味编程 ppt 编辑:程序博客网 时间:2024/05/21 02:37

PS:使用模板函数进行编程

子函数的编写

template<class T>void heap_sort(T*array,int length){    int i;    buildMaxHeap(array,length-1);    for(i=(length-1);i>=1;i--)    {        swap(&array[0],&array[i]);        heapSize--;        maxHeapify(array,0);    }}template<class T>void buildMaxHeap(T*array,int length){    int i;    int heapSize = length;    for(i=(length>>1);i>=0;i--)    {        maxHeapify(array,i);    }}template<class T>void maxHeapify(T*array;int index){  int largest = 0;  int left  = 2*index+1;  int right = 2*index+2;  if((left<=heapSize)&&(array[left]>array[index]))      largest = left;  else      largest = index; if((right<=heapSize)&&(array[right]>array[largest]))      largest = right; if(largest!=index) {      swap(&array[index],&array[largest]);      maxHeapify(array,largest); }}

测试代码

#include "stdafx.h"#include<iostream>using namespace std;int heapSize =0;int main(){    float a[]={10,1.0,6,2,6.5,3,8,7,9,2};    heap_sort(a,10);    for(int i=0;i<10;i++)        cout<<a[i]<<endl;    return 0;}

运行结果
这里写图片描述