빠른 정렬 루오 밸리

대담한 아이디어에서이 문제 솔루션

버킷 종류의 큰 한계가있다, 너무 많은 데이터 행을 사용할 수 없습니다, 그것은 시간 알고리즘의 공간, 높은 속도가

따라서, 대신 공간, 시간 맵 배열을 사용하는 실제적인 확장하고자


C ++ STL 맵 <INT, INT> 어레이, 아날로그 버킷 정렬로 사용할 수 있지만지도 동적 애플리케이션 저장 공간 자동 분리하는 것과 동일하기 때문에, 이전에 불필요한 공간을 해결


시간지도 저장 반복 순회 빈 부분을 건너 뜁니다


충격에 대한 보호에 다음 코드 (작업이나 뭔가 매우 간단)

#include<bits/stdc++.h>
#define getc getchar()
using namespace std;
map<int,int> k;//定义k桶 
int n;
map<int,int>::iterator it;//定义迭代器it 
int s[60000];
int read()//快读 ,不解释了 
{
    int x=0;
    char c;
    for(c=getc;c>'9'||c<'0';c=getc);
    for(;c<='9'&&c>='0';c=getc)x=x*10+c-'0';
    return x;
}
int main()
{
    n=read();
    for(int i=1;i<=n;i++)
    {
        int tis;
        tis=read();
        k[tis]++;//装入桶内 
    }
    for(it=k.begin();it!=k.end();it++)//迭代器遍历,不了解请百度 
    {
        
        for(int i=1;i<=it->second;i++)//map内元素是pair类型的,例如a[123]=666; 则first指123,second指666,以此类推 
        {//迭代器指向该元素的出现次数second 
            int sum=it->first;//迭代器指向该元素first
            printf("%d ",sum);//输出 
        }
    }
}

를 찾을 수 : 25 %의 버킷 종류의 속도

세 배 빠른 최적화 O2 후


PS 광고 : Tacca에의 블로그

추천

출처www.cnblogs.com/tsukishi/p/11307924.html