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


    每天早上叫醒你的不是闹钟,而是心中的梦~
  • 相关阅读:
    VS 对话框控件的Tab顺序问题
    基于OpenGL三维软件开发
    OpenGL 中的三维纹理操作
    VC 在桌面上绘制一些图形
    VC/MFC如何添加启动界面
    Cordova or Xamarin 用.net开发IOS和Android程序
    ASP.NET Web API
    软件项目如何选型
    CIO的职责、条件及价值
    Oracle日期周详解IW
  • 原文地址:https://www.cnblogs.com/vintion/p/4116915.html
Copyright © 2011-2022 走看看