Pagini recente » eusebiu_oji_2013_cls11-12 | Cod sursa (job #2767497) | Cod sursa (job #1527524) | Cod sursa (job #2621630) | Cod sursa (job #1525720)
#include <stdio.h>
#define Nadejde 500000
#define Smerenie 30
typedef struct {
int b, e;
} cell;
int N, ss;
int val[Nadejde];
cell stack[Smerenie];
/** Pune pe stiva intervalul (b, e). **/
void push(int b, int e) {
stack[ss].b = b;
stack[ss++].e = e;
}
/** Arunca varful stivei. **/
void pop(int *b, int *e) {
(*b) = stack[--ss].b;
(*e) = stack[ss].e;
}
/** Sorteaza cu quickSort iterativ. **/
void sort(int begin, int end) {
int b, e, tmp, pivot;
push(begin, end);
while (ss) {
pop(&begin, &end);
b = begin, e = end;
pivot = val[(b + e) >> 1];
while (b <= e) {
while (val[b] < pivot) {
b++;
}
while (val[e] > pivot) {
e--;
}
if (b <= e) {
tmp = val[b];
val[b++] = val[e];
val[e--] = tmp;
}
}
if (begin < e) {
push(begin, e);
}
if (b < end) {
push(b, end);
}
}
}
int main(void) {
int i;
FILE *f = fopen("algsort.in", "r");
fscanf(f, "%d", &N);
for (i = 0; i < N; i++) {
fscanf(f, "%d", &val[i]);
}
fclose(f);
f = fopen("algsort.out", "w");
sort(0, N - 1);
for (i = 0; i < N; i++) {
fprintf(f, "%d ", val[i]);
}
fclose(f);
/// Multumim Doamne!
puts("Doamne ajuta!");
return 0;
}