简单写了一个堆排序

随手写了一下,接口什么的肯定都不规范,先大概了解一下堆排序的过程。

#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  阅读(150)  评论(0编辑  收藏  举报

导航