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;
    }
    


    每天早上叫醒你的不是闹钟,而是心中的梦~
  • 相关阅读:
    Django之模板系统
    Django之ORM操作
    Django之路由分配系统
    基于模态对话框 学生管理系统
    初识Django
    ORM框架之SQLALchemy
    MySQL查询性能调优化
    MySQL练习题
    MySQL自带功能介绍
    javascript时间戳和日期字符串相互转换
  • 原文地址:https://www.cnblogs.com/vintion/p/4116915.html
Copyright © 2011-2022 走看看