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

    堆排序是源于树的,在此之前,我们要理解堆,堆相当与森林(许多树),且堆必为完全树

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn=100000+5;//n的最大长度
    int a[maxn],len;
    int main(){
    	int n,k;
    	cin>>n;
    	for(int i=1;i<=n;i++){
    	    cin>>a[i];
    	    k=i;//定义k为当前最大深度
    	    while(k>1/*k的位置不为根*/&&a[k]<a[k/2]/*当前节点小于它的父亲节点*/){
    	        int tmp=a[k];//交换
    	        a[k]=a[k/2];
    	        a[k/2]=tmp;
    	        k/=2;//将a[k]上浮一层
    		}
    	}
    	len=n;
    	for(int i=1;i<n;i++){
    	    printf("%d ",a[1]);//持续输入根节点所在的数
    	    a[1]=a[len--];//根节点所代表的树删去,替换成a串的最后一个
    	    k=1;//k的位置为根节点
    	    while((k*2<=len&&a[k]>a[k*2])||(k*2+1<=len&&a[k]>a[k*2+1])){//进行根节点此时代表数下浮
    	    	int u=k*2;//假定u为左孩子
    	    	if(u+1<=len&&a[u]>a[u+1])//看左孩子是否小于右孩子
    	    	   u++;//换为右孩子
    	    	int tmp=a[k];//进行交换
    	    	a[k]=a[u];
    	    	a[u]=tmp;
    	    	k=u;//更新k值
    		}
    	}
    	cout<<a[len];//输出串的最后一个
    	return 0;
    }
    
  • 相关阅读:
    iis6 , URL重写HTM文件名后,出现真实的HTM文件不能访问的解决
    pe如何安装ios系统
    ASP.NET Word转为PDF
    asp.net 操作word 权限
    windows server 2008 r2 修改远程登入的端口号(3389)
    A
    A Bug
    亲戚
    Kruskal
    HDOJ ——统计难题
  • 原文地址:https://www.cnblogs.com/jr-ag/p/9097198.html
Copyright © 2011-2022 走看看