简单写了一个堆排序
随手写了一下,接口什么的肯定都不规范,先大概了解一下堆排序的过程。
#include<iostream>
using namespace std;
int a[100];
void swap(int i ,int j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
void fix(int i, int n)
{
if(i*2+1 > n)return;
if(i*2+2 > n)
{
if(a[i]<a[i*2+1])
swap(i,i*2+!);
}
else
{
max = a[i*2+1] > a[i*2+2] ? i*2+1 : i*2+2;
if(a[i] < a[max])
swap(i,max);
fix(max,n);
}
}
void makeheap(int n)
{
int i ;
if(n%2 == 0)
i = n/2-1;
else
i = n/2;
while(i>=0)
{
fix(i,n);
i--;
}
}
void sortheap(int n)
{
makeheap(n);
while(n>0)
{
swap(0,n);
fix(0,--n);
}
}
int main()
{
for(int i = 0 ; i < 50 ; i++)
a[i] = i;
sortheap(49);
for(int i = 0 ; i < 50 ;i++)cout<<a[i]<<endl;
return 0;
}
posted on 2014-04-14 22:30 pengyu2003 阅读(156) 评论(0) 收藏 举报
浙公网安备 33010602011771号