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

    1. 对于堆, 结点I的左子2*i +1 右子2*i + 2

    2. 对于n的堆, 第一个非叶子结点是n/2 - 1, 考虑到数组是从0开始的, 最后一个结点是n-1, 第一个是0

    3. 删除和添加是在AdjustHeap()的基础上实现的

    #include<stdio.h>
    void swap(int *a, int *b)
    {
        int tem = *a;
        *a = *b;
        *b = tem;
    }
    
    void AdjustHeap(int *ar, int parent, int n)
    {
        if(n==1||parent>n/2-1)
            return;
        int left = 2*parent+1;
        int right = 2*parent+2;
        if(right<=n-1)
        {
            if(ar[parent]>=ar[left]&&ar[parent]>=ar[right])
                return;
            else
            {
                if(ar[left]>ar[parent]&&ar[left]>=ar[right])
                {
                    swap(&ar[left],&ar[parent]);
                    AdjustHeap(ar,left,n);
                }
                if(ar[right]>ar[parent]&&ar[right]>=ar[left])
                {
                    swap(&ar[right],&ar[parent]);
                    AdjustHeap(ar,right,n);
                }
            }
        }
        else
        {
            if(ar[parent]>=ar[left])
                return;
            else
            {
                swap(&ar[parent],&ar[left]);
                AdjustHeap(ar,left,n);
            }
        }
    }
    
    void HeapSort(int *ar, int n)
    {
        int i;
        for(i=n/2-1;i>=0;i--)
            AdjustHeap(ar,i,n);
        for(i=n-1;i>0;i--)
        {
            swap(&ar[0], &ar[i]);
            AdjustHeap(ar,0,i);
        }
    }
    
    int main()
    {
        int n;
        int a[100];
        while(~scanf("%d",&n))
        {
            int i;
            for(i=0;i<n;i++)
                scanf("%d",&a[i]);
            HeapSort(a,n);
            for(i=0;i<n;i++)
                printf("%d  ",a[i]);
            printf("
     ");
        }
        return 0;
    }
    


    每天早上叫醒你的不是闹钟,而是心中的梦~
  • 相关阅读:
    2.2 建立示例数据库
    2.1.4 基本概念
    8. 在NOARCHIVELOG模式下用户管理的备份与恢复
    2.1.2 系统全局区
    考过042
    ORA1157错误解决手册(转)
    4. 用户管理的备份
    Kohana之LOG使用
    jq插件之easing
    Svn服务器之必须提交更改日志篇
  • 原文地址:https://www.cnblogs.com/vintion/p/4116915.html
Copyright © 2011-2022 走看看