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

    //建堆

    #include <cstdio>
    #include <iostream>
    using namespace std;
    int n,a[110];
    
    void update(int o){
    	int l=o<<1,r=o<<1|1,maxn;
    	if(l<=n && a[l]>a[o])maxn=l;
    	else maxn=o;
    	if(r<=n && a[r]>a[maxn])maxn=r;
    	if(maxn!=o){
    		swap(a[o],a[maxn]);
    		update(maxn);
    	}
    }
    
    void init(){
    	for(register int i=n/2;i;i--)update(i);
    }
    
    int main(){
    	scanf("%d",&n);
    	for(register int i=1;i<=n;i++)scanf("%d",&a[i]);
    	init();
    	for(register int i=1;i<=n;i++)printf("%d ",a[i]);
    	return 0;
    }
    

      // 排序输出

    void solve(){
    	printf("%d ",a[1]);
    	swap(a[1],a[n]);
    	n--;
    	update(1);
    }
    

      //插入

    void insert(int x){
    	a[++n]=x;
    	int y=n;
    	while(y<1){
    		int p=y/2;
    		if(a[y]>a[p]){
    			swap(a[y],a[p]);
    			y=p;
    		}
    	}
    }
     
    

      


  • 相关阅读:
    1
    webpack
    webpack32
    41324
    124
    CSS 32
    Git 分支管理
    Git 标签管理
    datetime的timedelta对象
    unittest中的testCase执行顺序
  • 原文地址:https://www.cnblogs.com/codetogether/p/7755023.html
Copyright © 2011-2022 走看看