• 堆排序


    不稳定的排序。

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

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

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

    映射后会发生一些变化:

    shot

    #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	", numbers[i]);
    }
    int main(){
        init_array();
        HeapSort(numbers, N);
        print_array();
        printf("
    ");
        return 0;
    }
    
    
  • 相关阅读:
    将excel中的sheet1导入到sqlserver中
    .net中 Timer定时器
    Exception异常处理机制
    算法
    八、上网行为管理
    获取网站路径绝对路径的方法汇总
    Window逆向基础之逆向工程介绍
    Java Web代码审计流程与漏洞函数
    创建一个Java Web项目,获取POST数据并显示
    七、虚拟专用网
  • 原文地址:https://www.cnblogs.com/liyangguang1988/p/3704171.html
Copyright © 2020-2023  润新知