Cod sursa(job #350065)

Utilizator csizMocanu Calin csiz Data 22 septembrie 2009 16:38:44
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>
#include <list>
#include <vector>

using namespace std;



void sort(vector<int>& v,int p=1,int u=1){
	if(p>=v.size()) return;
	sort(v,(p+u)*3+1,p+5);
	for(int pasi=0;pasi<p;pasi++){
        for(int i=p+pasi;i<v.size();i+=p){
            if(v[i]<v[i-p]){
                //cautarea aia binara
                int a=pasi,b=i-p,m;
                while(a!=b){
                    m=(b-a)/p/2*p+a;
                    if(v[m]<v[i]){
                        a=m+p;
                    }else{
                        b=m;
                    }
                }
                //si inserarea lui
                for(;a<i;a+=p){
                    swap(v[a],v[i]);
                }
            }
        }
	}
}
int main(){
	ifstream in("algsort.in");
	ofstream out("algsort.out");

	int n;in>>n;

	vector<int> v;
	for(int i=0;i<n;i++){
		int t;in>>t;v.push_back(t);
	}
	sort(v);
	for(typeof(v.begin()) it=v.begin();it!=v.end();it++){
		out<<*it<<" ";
	}

}