Cod sursa(job #283332)

Utilizator dudu77tTudor Morar dudu77t Data 18 martie 2009 23:59:14
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.44 kb
#include <stdio.h>
#include <stdlib.h>

int n;
//int r = 1;
int a[500000];

void read();
void write();
void sort(int, int);

int main()
{
    read();
//    printf ("li\tr\tls\n");
    sort(0, n - 1);
    write();
    return 0;
}

void sort(int li, int ls)
{
    if (li >= ls)
    {
        return;
    }
    int i = li, j = ls, p = 0, tmp;
//    srand (r);
//    r = (rand() % (ls - li + 1)) + li;
//    printf ("%d\t%d\t%d\n", li, r, ls);
//    tmp = a[li];
//    a[li] = a[r];
//    a[r] = tmp;
    while (i < j)
    {
        if (a[i] > a[j])
        {
            tmp = a[i];
            a[i] = a[j];
            a[j] = tmp;
            p = 1 - p;
        }
        i += p;
        j -= (1 - p);
    }
    sort(li, i - 1);
    sort(i + 1, ls);
}

void sort1()
{
    int i, j, tmp;
    for (i = 0; i < n - 1; ++i)
    {
        for (j = i + 1; j < n; ++j)
        {
            if (a[j] < a[i])
            {
                tmp = a[i];
                a[i] = a[j];
                a[j] = tmp;
            }
        }
    }
}

void write()
{
    int i;
    FILE *fout = fopen ("algsort.out", "w");
    for (i = 0; i < n; ++i)
    {
        fprintf (fout, "%d ", a[i]);
    }
    fclose (fout);
}

void read()
{
    int i;
    FILE *fin = fopen ("algsort.in", "r");
    fscanf (fin, "%d", &n);
    for (i = 0; i < n; ++i)
    {
        fscanf (fin, "%d", &a[i]);
    }
    fclose (fin);
}