zoukankan      html  css  js  c++  java
  • 数据结构-堆排

    堆排

    原理:除去底层,一个一个由三个点结合而成的小三角进行内部的比较
    发生位置变化的时候,又会从上向下一个个小三角形的进行比较

    代码

    #include<iostream>
    #include<stdio.h>
    using namespace std;
    #define Max 2000000
    
    int n,H[Max];
    
    void maxHeapify(int i)
    {
    	int l,r,largest=i;
    	l=2*i;
    	r=2*i+1;
    	if(l<=n&&H[l]>H[largest])largest=l;
    	if(r<=n&&H[r]>H[largest])largest=r;
    	if(largest!=i)
        {
        	swap(H[largest],H[i]);
        	maxHeapify(largest);//大的从下面往上面移,小的往上面移,但有可能由于小的加入导致加入的三角形变得不稳定 
    	}
    	
    }
    int main()
    {
    	cin>>n;
    	
    	for(int i=1;i<=n;i++)
    	   cin>>H[i];
    	
    	for(int i=n/2;i>=1;i--)//n/2是最后一个结点的根节点(n/2右边的结点都是没有子树的) 
    	    maxHeapify(i);
    
        for(int i=1;i<=n;i++)
    	    cout<<H[i]<<" ";
    	cout<<endl;
    	
    	return 0;	 
    }
    
  • 相关阅读:
    2021.3.3
    2021.3.2
    2021.3.1
    2021.2.28(每周总结)
    2021.2.27
    2021.2.26
    2021.2.25
    2021.2.23
    Redis系统学习之五大基本数据类型(List(列表))
    Redis系统学习之五大基本数据类型(String(字符串))
  • 原文地址:https://www.cnblogs.com/BeautifulWater/p/14559739.html
Copyright © 2011-2022 走看看