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

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int a[1010];
    void heapadjust(int s,int m)
    {//建立新堆
        int temp,j;
        temp = a[s];//找最大值
        for(j=2*s;j<=m;j*=2)//二叉树的性质五
        {//求左孩子要乘2
            if(j<m&&a[j]<a[j+1])
               ++j;//此时右孩子为所求目标
            if(temp>=a[j])
                break;
            a[s]=a[j];
            s=j;
        }
        a[s]=temp;
    }
    int main()
    {
        int n;
        scanf("%d",&n);
        memset(a,0,sizeof(a));
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
        for(int i=n/2;i>0;i--)
            heapadjust(i,n);//首先n个元素建立堆
        for(int i=n;i>1;i--)
        {
            swap(a[1],a[i]);//不停交换第一个与最后一个的位置,因为重新建立堆后,第一个又为最大值
            heapadjust(1,i-1);//重新对i-1个元素建立堆
        }
        for(int i=1;i<=n;i++)
            printf("%d
    ",a[i]);
        return 0;
    }
    彼时当年少,莫负好时光。
  • 相关阅读:
    java 编码问题
    关于时间
    页面
    关于微信
    01-jQuery的介绍
    15-BOM
    14-定时器
    13-JS中的面向对象
    12-关于DOM操作的相关案例
    购物车练习
  • 原文地址:https://www.cnblogs.com/l609929321/p/6582049.html
Copyright © 2011-2022 走看看