Pagini recente » Cod sursa (job #670914) | Cod sursa (job #551057) | Cod sursa (job #37548) | Cod sursa (job #3124295) | Cod sursa (job #351506)
Cod sursa(job #351506)
#include <fstream>
#include <vector>
#include <iostream>
using namespace std;
class grup{
public:
int x;
int n;
grup(int X):x(X),n(0){}
void add(){n++;}
};
bool operator<(const grup& a,const grup& b){
return a.x<b.x;
}
void sort(vector<grup> &v,int i,int j){
if(i+1<j){
int s=i+1,d=j-1;
while(s<d){
if(v[s]<v[i]) s++;
else if(v[d]<v[i]) swap(v[s],v[d]);
if(!(v[d]<v[i])) d--;
}
if(v[d]<v[i]){
}else{
d--;
}
swap(v[d],v[i]);
sort(v,i,d);
sort(v,d+1,j);
}
}
int main(){
ifstream in("algsort.in");
ofstream out("algsort.out");
vector<grup> v;int n;
in>>n;
v.reserve(n);
for(int i=0;i<n;i++){
int t;in>>t;
if(v.size()&&v[v.size()-1].x==t){
v[v.size()-1].add();
}else{
v.push_back(t);\
}
}
for(int i=0;i<n/2;i++){
swap(v[rand()%n],v[rand()%n]);
}
sort(v,0,n);
for(int i=0;i<n;i++){
for(int j=0;j<v[i].n;j++){
out<<v[i].x<<" ";
}
}
}