zoukankan      html  css  js  c++  java
  • 快速排序 & 归并排序模板

    快速排序+随机化:

    #include<bits/stdc++.h>
    #define Rand(a,b) rand()%(b-a)+a
    using namespace std;
    
    const int maxn=200010;
    int a[maxn];
    
    int read(){
    	int Value=0,Base=1;char Ch=getchar();
    	for(;!isdigit(Ch);Ch=getchar())if(Ch=='-')Base=-1;
    	for(;isdigit(Ch);Ch=getchar())Value=Value*10+(Ch^'0');
    	return Value*Base;
    }
    
    void Quick_sort(int l,int r){
    	if(l>=r)return ;
    	int key=a[Rand(l,r)],head=l,tail=r;
    	while(head<=tail){
    		while(a[head]<key)head++;
    		while(a[tail]>key)tail--;
    		if(head<=tail)
    			swap(a[head++],a[tail--]);
    	}
    	Quick_sort(l,tail);Quick_sort(head,r);
    }
    
    int main( ){
    	int m,n,j,k,i;
    	srand((int)time(NULL));
    	n=read();
    	for(i=1;i<=n;i++)
    		a[i]=read();
    	Quick_sort(1,n);
    	for(i=1;i<=n;i++)
    		printf("%d ",a[i]);
    	puts("");
    	return 0;
    }
    

    归并排序+逆序对:

    #include<bits/stdc++.h>
    using namespace std;
    
    const int maxn=200010;
    int a[maxn],ans,t[maxn];
    
    int read(){
    	int Value=0,Base=1;char Ch=getchar();
    	for(;!isdigit(Ch);Ch=getchar())if(Ch=='-')Base=-1;
    	for(;isdigit(Ch);Ch=getchar())Value=Value*10+(Ch^'0');
    	return Value*Base;
    }
    
    void Merge_sort(int l,int r){
    	if(l>=r)return ;
    	int mid=(l+r)>>1,i=l,j=mid+1,k=l;
    	Merge_sort(l,mid);Merge_sort(mid+1,r);
    	while(i<=mid && j<=r){
    		if(a[i]<=a[j])t[k++]=a[i++];
    		else t[k++]=a[j++],ans+=mid-i+1;
    	}
    	while(i<=mid)t[k++]=a[i++];
    	while(j<=r)t[k++]=a[j++];
    	for(i=l;i<=r;i++)a[i]=t[i];
    }
    
    int main( ){
    	int m,n,j,k,i;
    	n=read();
    	for(i=1;i<=n;i++)a[i]=read();
    	Merge_sort(1,n);
    	printf("%d
    ",ans);
    	/*
    	for(i=1;i<=n;i++)
    		printf("%d ",a[i]);
    	puts("");
    	*/
    	return 0;
    }
    

    思路比较简单,都是分治法的体现,可进行比较

  • 相关阅读:
    ASP.NET MVC5 ModelBinder
    19 个 JavaScript 编码小技巧
    Tomcat使用线程池配置高并发连接
    排名前16的Java工具类
    RabbitMQ与spring集成,配置完整的生产者和消费者
    Spring4+Springmvc+quartz实现多线程动态定时调度
    Redis优化建议
    JPA的多表复杂查询
    Spring Boot中自定义注解+AOP实现主备库切换
    Restful API 中的错误处理
  • 原文地址:https://www.cnblogs.com/ABCDXYZnoip/p/7774748.html
Copyright © 2011-2022 走看看