码迷,mamicode.com
首页 > 其他好文 > 详细

堆排序

时间:2014-05-10 20:11:52      阅读:330      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   class   code   color   

不稳定的排序。

时间复杂度: O(nlgn), 空间复杂度O(1)

适合数据结构:数组,二叉树。

经常用到通过数组进行堆排序:

映射后会发生一些变化:

bubuko.com,布布扣

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 1000000
int numbers[N]={0}; // data
void HeapAdjust(int data[], int length, int father){
    if(!data || length < 1 || father >= length || father < 0) return;
    int value = data[father];                                       // set data[0] to save the value of original father
    for(int child = 2*father+1; child < length; child = 2*father+1){
        if(child < length-1 && data[child] < data[child+1]) ++child;
        if(data[child] < value) break;
        else data[father] = data[child];
        father = child;
    }
    data[father] = value;
}
void HeapSort(int data[], int length)
{
    for(int i = length/2-1; i >= 0; --i)
        HeapAdjust(data, length, i);
    for(int i = length-1; i >= 0; --i){
        int tem = data[i];
        data[i] = data[0];
        data[0] = tem;
        HeapAdjust(data, i, 0); // DESC
    }
}
void init_array()
{
    int i;
    /*srand((unsigned) time(NULL));*/
    for(int i = 0; i < N; i++)
        numbers[i] = rand() % N;
}
void print_array()
{
    int i;
    for(i = 0; i < N; i++)
        printf("%d\t", numbers[i]);
}
int main(){
    init_array();
    HeapSort(numbers, N);
    print_array();
    printf("\n");
    return 0;
}

堆排序,布布扣,bubuko.com

堆排序

标签:des   style   blog   class   code   color   

原文地址:http://www.cnblogs.com/liyangguang1988/p/3704171.html

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