zoukankan      html  css  js  c++  java
  • 堆排序

    堆排序 

    参考《算法导论》《C程序设计语言》

    #include<stdio.h>
    int HEAPSIZE=8;
    int LENGTH=8;
    void view(int A[]);
    int parent(int i){//节点i的父节点下标
        return (i+1)/2-1;
    }
    int left(int i){//节点i的左孩子下标
        return (i+1)*2-1;
    }
    int right(int i){//节点i的右孩子下标
        return (i+1)*2;
    }
    void exchange(int A[], int i, int j){
        int temp=A[i];
        A[i]=A[j];
        A[j]=temp;
    }
    //维护最大堆的性质A[parent[i]]>=A[i]
    void maxHeapify(int A[], int i){
        printf("max heapify %d
    ",i);
        int l=left(i);
        int r=right(i);
        int largest;
        if((l<=(HEAPSIZE-1))&&(A[l]>A[i]))
            largest=l;
        else largest=i;
        if((r<=(HEAPSIZE-1))&&(A[r]>A[largest]))
            largest=r;
        if(largest!=i){
            exchange(A,i,largest);
            //在交换后,下标为largest的节点是原来的A[i], 于是以该结点为根的
            //子树有可能违反最大堆的性质
            maxHeapify(A,largest);
        }
        view(A);
    }
    //用自底向上的方法把一个大小为n的数组A[0..n-1]转换为最大堆
    void buildMaxHeap(int A[]){
        for(int i=(LENGTH/2-1); i>=0; i--){
            maxHeapify(A,i);
        }
    }
    //堆排序算法
    void heapSort(int A[]){
        buildMaxHeap(A);
        for(int i=LENGTH-1; i>=1; i--){
            exchange(A,0,i);
            HEAPSIZE=HEAPSIZE-1;
            maxHeapify(A,0);
        }
    }
    int main(){
        int A[8]={6,5,8,7,9,3,2,4};
        view(A);
        heapSort(A);
        view(A);
        getchar();
        getchar();
        return 0;
    }
    
    void view(int A[]){//显示A数组当前状态 
        for(int i=0;i<8;i++){ 
            putchar(A[i]+'0'); 
            putchar(' '); 
        } 
        putchar('
    '); 
    }

    实验结果

    ...

  • 相关阅读:
    JAVA BASE64
    Mysql Index extends优化
    JAVA异步加回调的例子
    TCP长连接和短连接的区别
    浅析RPC概念框架
    MySQL Index Merge Optimization
    一简单的RPC实例(Java)
    return语句的用法
    java中对象和对象的引用
    UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别
  • 原文地址:https://www.cnblogs.com/learning-c/p/5215437.html
Copyright © 2011-2022 走看看