Cod sursa(job #762964)

Utilizator ioana26Ioana Andronescu ioana26 Data 30 iunie 2012 17:05:03
Problema Sortare prin comparare Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.5 kb
/*
Algoritm de sortare prin comparare - QuickSort.
*/

#include <stdio.h>
#include <stdlib.h>
 
#define MAX     500000 
int numere[MAX];

/*void quicksort (int start, int stop) {
	int i = start - 1;
	int j = stop;
    int temp = numere[(i + j) >> 1];

    do {
        while (numere[i] < temp)
            i++;
        while (numere[j] > temp)
            j--;
        if (i <= j) {
            int aux = numere[i];
            numere[i] = numere[j];
            numere[j] = aux;
            i++;
            j--;
        }
    } while (i <= j);
    if (start < j)
        quicksort(start, j);
    if (i < stop)
        quicksort(i, stop);
} */

void merge (int start, int stop) {
    int i, j, k;
    int aux[MAX];
    int mid = (start + stop) >> 1;
    for (i = start, j = mid + 1, k = start; i <= mid || j <= stop;) 
        if (j > stop || (i <= mid && numere[i] < numere[j]))
            aux[k++] = numere[i++];
        else
            aux[k++] = numere[j++];

    for (k = start; k <= stop; k++)
        numere[k] = aux[k];
}

void mergesort (int start, int stop) {
    if (start == stop)
        return;
    
    int mid = (start + stop) >> 1;
    mergesort(start, mid);
    mergesort(mid + 1, stop);
    merge(start, stop);
}

int main () {
	int n;
	int i;

    freopen("algsort.in", "r", stdin);
    freopen("algsort.out", "w", stdout);

	scanf("%d", &n);
	for (i = 0; i < n; i++)
		scanf("%d", &numere[i]);
	//quicksort(0, n - 1);
    mergesort(0, n - 1);
	for (i = 0; i < n; i++)
		printf("%d ", numere[i]);
	return 0;
}