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

    #include "stdafx.h"
    #include <iostream>
    #include <assert.h>
    using namespace std;
    
    //对于a来说,除了a[s]之外均满足大顶堆的定义
    // 该函数将下标 s到m 调整为大顶堆
    void heapAdjust(int* a,int s, int m)
    {
        int temp = a[s];
        // 下标从0开始,则两个孩子分别为 2*i+1 和 2*i+2
        for(int j=2*s+1; j<=m; j=j*2+1)
        {
            // 执行完成后j中保存了两个孩子中较大的孩子的下表
            // 如果j=m,说明m是最后的左孩子
            if(j<m && a[j] < a[j+1]) 
                j++;
            if(temp>=a[j])// s就是要插入的位置
                break;
            //否则进行调整,将孩子中较大的孩子,放入s的位置
            // 并将j赋值给s
            a[s] = a[j];
            s = j;
        }
        a[s] = temp;
    }
    
    
    int main()
    {
        int a[] = {49,38,65,97,76,13,27,49};
        int length = sizeof(a)/sizeof(a[0]);
    
        // 从最后一个没有孩子的节点进行调整,建立大顶推
        for(int i= (length-1)/2 ; i>=0; i--)
            heapAdjust(a,i,length-1);
    
        // 将堆顶元素和最后一个元素进行交换
        // 之后,重新调整堆
        // 完成之后,就是 从小到大的排序
        for(int i = length-1; i>0; i--)
        {
            int temp = a[0];
            a[0] = a[i];
            a[i] = temp;
            heapAdjust(a,0,i-1);
        }
    
    
        for(int i=0; i<length; i++)
            cout<<a[i]<<endl;
    }
  • 相关阅读:
    正反向代理工具squid
    docker安装jira
    pandas输出的数据集导入数据库
    python监控接口告警模板
    Auth认证
    Form与ModelForm的 使用
    原生Ajax与jQuery的Ajax和伪Ajax
    Django缓存与信号
    Django的生命周期与中间件的流程
    CSRF的原理和基本使用
  • 原文地址:https://www.cnblogs.com/cyttina/p/2740131.html
Copyright © 2011-2022 走看看