Pagini recente » Cod sursa (job #714265) | Cod sursa (job #1259373) | Cod sursa (job #2810193) | Cod sursa (job #1499801) | Cod sursa (job #505419)
Cod sursa(job #505419)
#include <cstdio>
using namespace std;
int a[500001];
void quick(int l, int r){
if(l < r){
int aux, mid = (l + r) >> 1, min2;
/* if(a[l] > a[r]) aux = a[r], a[r] = a[l], a[l] = aux;
if(a[l] <= a[mid] && a[mid] <= a[r]) min2 = mid;
if(a[mid] <= a[l]) min2 = l;
if(a[r] <= a[mid]) min2 = r;
aux = a[r], a[r] = a[min2], a[min2] = aux;
*/
aux = a[mid], a[mid] = a[r], a[r] = aux;
int i = l, j = r, v = aux;
while(i < j){
while(i < j && a[i] <= v) i++;
while(i < j && a[j] >= v) j--;
if(i < j) aux = a[i], a[i] = a[j], a[j] = aux;
}
aux = a[r], a[r] = a[j], a[j] = aux;
quick(l, j-1);
quick(j+1, r);
}
}
int main(){
FILE *f = fopen("algsort.in", "r");
FILE *g = fopen("algsort.out", "w");
int i = 0, n;
fscanf(f, "%d", &n);
for(i = 0; i < n; i++)
fscanf(f, "%d", &a[i]);
quick(0, n-1);
for(i = 0; i < n; i++)
fprintf(g, "%d ", a[i]);
return 0;
}