|
常用链接
留言簿(4)
随笔分类
随笔档案
搜索
最新评论

阅读排行榜
评论排行榜
Powered by: 博客园
模板提供:沪江博客
|
|
|
|
|
发新文章 |
|
|
《算法导论》中典型的最大堆排序
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <vector>
using namespace std;

template<class T> void Max_Heap(T a[],int i,int size)
  {
int r = 2*i + 2;
int l = 2*i + 1;
int largest;
if (l<size && a[l]>=a[i])
 {
largest = l;
}
else
largest = i;
if (r<size && a[r] >=a[largest])
 {
largest = r;
}
if (largest != i)
 {
swap(a[largest],a[i]);
Max_Heap(a,largest,size);
}
}

template<class T> void Build_Max_Heap(T a[],int size)
  {
for (int i=size/2;i>=0;i--)
 {
Max_Heap(a,i,size);
}
}

template<class T> void HeapSort(T a[],int size)
  {
Build_Max_Heap(a,size);
for (int i=size-1;i>=1;i--)
 {
swap(a[i],a[0]); //将最大数换到数组末尾
//show(a,size);
size--;
Max_Heap(a,0,size);
}
}

template<class T> void show(T a[],int size)
  {
cout<<"排序后结果为"<<endl;
for (int i=0;i<size;i++)
 {
cout<<a[i]<<endl;
}
}

int main()
  {
int num;
cin>>num;
char* input = new char[num];
for (int i=0;i<num;i++)
 {
cin>>input[i];
}

// Build_Max_Heap(input,num); //建立最大堆
HeapSort(input,num); //堆排序
show(input,num);
}
|
|