Nestor~Rush~

A man is not old until regrets take the place of dreams
“__stack_chk_fail”错误
特权级转移总结(转)

堆排序

nestor posted @ 2011年9月28日 14:16 in os , 1132 阅读

一个简单的堆排序,搞了半天,汗~~

 

/*
 * =====================================================================================
 *
 *       Filename:  heap_sort.c
 *
 *    Description:  堆排序
 *
 *        Version:  1.0
 *        Created:  2011年09月28日 20时09分46秒 CST
 *       Revision:  none
 *       Compiler:  gcc
 *
 *         Author:  nestor 
 *        Company:  
 *
 * =====================================================================================
 */

#include "stdio.h"
#define length 10

int heap_size;

void max_heappify(int a[],int i); 
void build_max_heap(int a[]);
void heap_sort(int a[]);
int left(int i); 
int right(int i); 
int main(void)
{
    int a[length+1]={0,45,324,4,54,324,4,54,65,67,43},i;
    printf("please input 10 numbers to sort\n");
//  for(i=1;i<length+1;i++)
//      scanf("%d",&a[i]);

    heap_sort(a);
    for(i=1;i<length+1;i++)
    {

        printf("%d ",a[i]);
    }
    printf("\n");
    return 0;
}

void max_heappify(int a[],int i)
{
    int l, r, largest, temp;
    l=left(i);
    r=right(i);
    if(l<=heap_size && a[l]>a[i])
    {
        largest=l;
    }
    else
    {
        largest=i;
    }
    if(r<=heap_size && a[r]>a[largest])
    {
        largest=r;
    }
    if(largest!=i)
    {
        temp=a[i];
        a[i]=a[largest];
        a[largest]=temp;
        max_heappify(a, largest);
    }
}
void build_max_heap(int a[])
{
    int i;
    heap_size=length;
    for(i=heap_size/2;i>=1;i--)
    {
        max_heappify(a, i);
    }
}
void heap_sort(int a[])
{
    int i,temp;
    build_max_heap(a);
    for(i=length;i>=1;i--)
    {
        temp=a[i];
        a[i]=a[1];
        a[1]=temp;
        heap_size--;
        max_heappify(a,1);
    }
}
int left(int i)
{
    return 2*i;
}
int right(int i)
{
    return 2*i+1;
}
 
 

 

  • 无匹配

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter