堆排序

堆排序具有合并排序(时间复杂度O(nlgn)低)和插入排序(空间消耗少)的优点。

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#define MAX 10
int size;
int MAX_Heapify(int A[],int i)
{
 int l,r,largest;
 l = i*2+1;
 r = i*2 + 2;
 if(l < size && A[l] > A[i])
  largest = l;
 else
  largest = i;
 if(r < size && A[r] > A[largest])
  largest = r;
 if(largest != i)
 {
  int tmp = A[i];
  A[i] = A[largest];
  A[largest] = tmp;
  MAX_Heapify(A,largest);
 }
 return 0;
}
int build_heap(int A[])
{
 int i;
 for(i = (size-1)/2;i>=0;i--)
  MAX_Heapify(A,i);
 return 0;
}
int heap_sort(int A[])
{
 int i,tmp;
 build_heap(A);
 for(i = size-1;i>0;i--)
 {
  tmp = A[0];
  A[0] = A[i];
  A[i]=tmp;
  size--;
  MAX_Heapify(A,0);
 }
 return 0;
}

int test()
{
 int a[10],i;
 for(i = 0;i<10;i++)
 {
  a[i] = rand();
  printf("%d\t",a[i]);
 }
 size = sizeof(a)/sizeof(int); 
 heap_sort(a);
 size = sizeof(a)/sizeof(int);
 for(i=0;i<MAX;i++)
  printf("%d\t",a[i]);
 return 0;
}
int main()
{
 test();
 return 0;
}

 

posted @ 2013-12-10 17:09  weilq  阅读(181)  评论(0编辑  收藏  举报