堆排序

#include <stdio.h>
#include <stdlib.h>

void swap(int a[], int n, int i)
{
int temp;
temp = a[n] ;
a[n] = a[i] ;
a[i] = temp;
}

void HeapAdjust(int L[], int s, int m)
{

int temp,j;
temp = L[s];

for( j = 2*s; j<m; j*=2)
{
if(j < m && L[j] < L[j+1])
++j;
if(temp > L[j])
break;
L[s] = L[j];
s = j;
}
L[s] = temp;
}


void HeapSort(int L[], int length)
{
int i;
for( i = length/2; i >0; i--)
HeapAdjust(L, i, length);
for(i=1;i<=6;i++)
printf("%d",L[i]);

printf("\n");

for( i = length; i >1; i--)
{
swap(L,1,i);
HeapAdjust(L,1,i-1);
}
}


int main()
{
int i;
int a[7]={0,3,5,8,9,1,2};//不考虑a[0]
HeapSort(a,6);
for(i=1;i<=6;i++)
printf("%d",a[i]);
printf("\n");
}

posted @ 2012-08-12 20:39  风去无痕  阅读(99)  评论(0编辑  收藏  举报