Pagini recente » Cod sursa (job #3227615) | Cod sursa (job #2418621) | Cod sursa (job #2340642) | Cod sursa (job #2125700) | Cod sursa (job #720950)
Cod sursa(job #720950)
#include<stdio.h>
#include<assert.h>
#include<algorithm>
#include<vector>
using namespace std;
const int knmax = 500005;
int elem, given[knmax];
void read(){
assert(freopen("algsort.in", "r", stdin) != NULL);
scanf("%d", &elem);
for(int i = 1; i <= elem; ++i)
scanf("%d", &given[i]);
}
void qu_sort(int left, int right){
if(left == right || left > right)
return;
if(right - left == 1){
if(given[left] > given[right])
swap(given[left], given[right]);
return;
}
int aux = given[(left + right) / 2], i, j;
for(i = left, j = right; i <= j; ++i)
while(given[i] > aux && j > i){
swap(given[i], given[j]);
--j;
}
qu_sort(left, i - 1);
qu_sort(i, right);
}
void solve(){
random_shuffle(given + 1, given + elem + 1);
qu_sort(1, elem);
}
void write(){
assert(freopen("algsort.out", "w", stdout) != NULL);
for(int i = 1; i <= elem; ++i)
printf("%d ", given[i]);
}
int main(){
read();
solve();
write();
return 0;
}