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

堆排序

时间:2017-05-07 01:08:10      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:sizeof   printf   std   序列   color   tmp   pad   adjust   style   

#include <stdio.h>

void swap(int *x, int *y)
{
    int tmp = *x;
    *x = *y;
    *y = tmp;
}

// 将index为根的树调整成对大堆
void HeapAdjust(int *array, int index, int length)
{
    int nChild;
    int lChild;
    int rChild;

    for (; 2 * index + 1 < length; index = nChild) {
        nChild = lChild = 2 * index + 1, 
        rChild = lChild + 1;
        if (lChild < length - 1 && array[rChild] > array[nChild])
            nChild = rChild;

        if (array[index] < array[nChild]) {
            swap( &array[index], &array[nChild]);
        } else {
            break;
        }
    }
}

// 堆排序
void HeapSort(int *array, int length)
{
    int i;
    //从最后一个非叶节点开始调整,将整个数组调整成最大堆
    for (i = length/2 - 1; i >= 0; i--) {
        HeapAdjust(array, i, length);
    }

    //从最后一个元素开始对序列进行调整,不断的缩小调整的范围直到第一个元素
    for (i = length - 1; i > 0; i--) {
        swap(&array[0], &array[i]);
        HeapAdjust(array, 0, i);
    }
}

int main()
{
    int i;
    int num[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
    HeapSort(num, sizeof(num)/sizeof(int));

    for (i=0; i < sizeof(num)/sizeof(int); i++) {
        printf("%d ",num[i]);
    }
    return 0;
}

 

堆排序

标签:sizeof   printf   std   序列   color   tmp   pad   adjust   style   

原文地址:http://www.cnblogs.com/aceg/p/6819171.html

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