//
// main.cpp
// Data Structure TRY1
//
// Created by zr9558 on 6/7/13.
// Copyright (c) 2013 zr9558. All rights reserved.
//
// Data Structure C++, Weiss, P.273 Heapsort
#include<iostream>
using namespace std;
#include<vector>
#include<math.h>
inline int leftChild( int i) // the right child of i is 2*i+2
{
return 2*i+1;
}
template<typename Comparable>
void percDown( vector<Comparable> &a, int i, int n)
{
int child;
Comparable temp;
for( temp=a[i]; leftChild(i)<n; i=child)
{
child=leftChild(i);
if( child!=n-1 && a[child]<a[child+1])
child++;
if( temp<a[child])
a[i]=a[child];
else break;
}
a[i]=temp;
}
template<typename Comparable>
void heapSort( vector<Comparable> &a)
{
for( int i=int(a.size())/2; i>=0; --i) // buildHeap
percDown(a, i, int(a.size()));
for( int j=int(a.size())-1; j>0; --j) // deleteMax
{
swap(a[0],a[j]);
percDown(a, 0, j);
}
}
int main()
{
vector<int> ivec;
for( int i=0; i<30; ++i)
ivec.push_back(rand()%100);
for( int i=0; i!=ivec.size(); ++i)
cout<<ivec[i]<<" ";
cout<<endl;
heapSort(ivec);
for( int i=0; i!=ivec.size(); ++i)
cout<<ivec[i]<<" ";
cout<<endl;
return 0;
}
本文介绍了一种使用C++实现的堆排序算法。通过具体的代码示例展示了如何构建最大堆并利用该堆进行排序的过程。文章包括了核心函数percDown()的实现细节,以及heapSort()函数的工作原理。
1万+

被折叠的 条评论
为什么被折叠?



