zoukankan      html  css  js  c++  java
  • 快速排序和堆排序模板

    不得不承认在初赛来临前复习这些很丢人……
    好吧,其实我觉得可以手推,不过放个板子保险一点。
    因为我怂

    Quick_Sort

    using namespace std;
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <ctime>
    #include <algorithm>
    int n;
    int a[200001];
    void qsort(int l,int r){
    	int i=l,j=r,mid=a[l+rand()%(r-l+1)];
    	do{
    		while (a[j]>mid) j--;
    		while (a[i]<mid) i++;
    		if (i<=j){
    			swap(a[i],a[j]);
    			i++,j--;
    		}
    	}
    	while (i<=j);
    	if (i<r)
    		qsort(i,r);
    	if (l<j)
    		qsort(l,j);
    }
    int main(){
    	scanf("%d",&n);
    	for (int i=1;i<=n;++i)
    		scanf("%d",&a[i]);
    	srand(time(0));
    	qsort(1,n);
    	for (int i=1;i<=n;++i)
    		printf("%d
    ",a[i]);
    	return 0;
    }
    

    Heap_Sort

    //heap(The largest value is on the top.)
    using namespace std;
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    int n,m;
    int h[200001];
    void up(int x){
    	while (x!=1 && h[x]>h[x>>1]){
    		swap(h[x],h[x>>1]);
    		x>>=1;
    	}
    }
    void down(int x){
    	int k;
    	while ((k=x<<1)<=n){
    		if ((k|1)<=n && h[k|1]>h[k])
    			k|=1;
    		if (h[x]>h[k])
    			return;
    		swap(h[x],h[k]);
    		x=k;
    	}
    }
    void pop(){
    	swap(h[1],h[n]);
    	n--;
    	down(1);
    }
    int main(){
    	scanf("%d",&n);
    	m=n;
    	for (int i=1;i<=m;++i)
    		scanf("%d",&h[i]);
    	for (int i=m>>1;i>=1;--i)
    		down(i);
    	for (int i=m;i>=1;--i)
    		pop();
    	for (int i=1;i<=m;++i)
    		printf("%d
    ",h[i]);
    	return 0;
    }
    
  • 相关阅读:
    Nexus入门指南(图文)[转]
    java注解[转]
    JS设置IE可信站点及ActiveX设置
    ExtJS 4 树
    SQL大全
    基于Spring aop 和JAVA注解方式添加日志
    Excle自动增长序号
    VS 生成后事件
    Oracle命令分解之正则表达式搜索(一)
    Oracle命令分解之……SOUNDEX
  • 原文地址:https://www.cnblogs.com/jz-597/p/11145272.html
Copyright © 2011-2022 走看看