码迷,mamicode.com
首页 > 编程语言 > 详细

堆排序

时间:2014-12-08 17:27:16      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   ar   color   sp   for   on   数据   

#include <stdio.h>

#define LeftChild(i) ( 2 * ( i ))

void PercDown( int A[] , int i , int N)
{
    int Child;
    int Tmp ;
    
    for (Tmp = A[i]; LeftChild(i) <= N; i = Child) { // 注意这里我只写了 < N , 导致结果为2,1,3,4,,,,即最后两个数据
                                                     // 并没有保持堆华,找了很久才找到
        Child = LeftChild(i);
        
        if(Child != N && A[Child + 1] > A[Child])
            Child ++;
        
        if (Tmp < A[Child])
            A[i] = A[Child];
        else
            break;
            
    }
    
    A[i] = Tmp ;
}

void heapSort(int A[] , int N)
{
    int i ;
    int Tmp ;
    
    for (i = N / 2 ; i > 0 ; i--)  //Bulid Heap 很简单的思想
        PercDown(A, i, N);
    
    for (i = N ; i > 0 ; i--) {
        Tmp = A[N];
        A[N] = A[1];
        A[1] = Tmp;
        PercDown(A, 1, --N);
    }
}
int main(int argc, const char * argv[]) {
    
    int A[16] = {-10,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
    heapSort(A, 15);
    
    for (int i = 0 ; i < 16 ; i ++) {
        printf("%d ",A[i]);
    }
    
    return 0;
}

 

堆排序

标签:style   blog   io   ar   color   sp   for   on   数据   

原文地址:http://www.cnblogs.com/Big-Ding/p/4151210.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!