Cod sursa(job #1455984)

Utilizator numeutilizatorIon Gabriel numeutilizator Data 29 iunie 2015 16:41:03
Problema Sortare prin comparare Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.81 kb
#include <stdio.h>
#include <stdlib.h>

int ma;
void q_sort(int ls,int ld, int m[]){
    int pivot;
    pivot=m[(ls+ld)/2];
    int i,j;
    i=ls;
    j=ld;
    int t;
    int k;
    while(i<j){
        while(i<ld && m[i]<pivot) i++;
        while(j>ls && m[j]>pivot) j--;
        if(i<=j){
            t=m[i];
            m[i]=m[j];
            m[j]=t;
            i++;
            j--;
        }

    }
    if(ls<j) q_sort(ls,j,m);
    if(i<ld) q_sort(i,ld,m);
}



void q_sort_rand(int ls,int ld, int m[]){
    int pivot;
    pivot=m[ls+rand()%(ls+ld)];
    int i,j;
    i=ls;
    j=ld;
    int t;
    int k;
    while(i<j){
        while(i<ld && m[i]<pivot) i++;
        while(j>ls && m[j]>pivot) j--;
        if(i<=j){
            t=m[i];
            m[i]=m[j];
            m[j]=t;
            i++;
            j--;
        }

    }
    if(ls<j) q_sort(ls,j,m);
    if(i<ld) q_sort(i,ld,m);
}

int partition( int a[], int l, int r) {
   int pivot, i, j, t;
   pivot = a[l];
   i = l; j = r+1;

   while( 1)
   {
   	do ++i; while( a[i] <= pivot && i <= r );
   	do --j; while( a[j] > pivot );
   	if( i >= j ) break;
   	t = a[i]; a[i] = a[j]; a[j] = t;
   }
   t = a[l]; a[l] = a[j]; a[j] = t;
   return j;
}

void quickSort( int a[], int l, int r)
{
   int j;

   if( l < r )
   {
   	// divide and conquer
        j = partition( a, l, r);
       quickSort( a, l, j-1);
       quickSort( a, j+1, r);
   }

}

int main(){
    FILE *fin=fopen("algsort.in","r");
    FILE *fout=fopen("algsort.out","w");
    int m[500001];
    int i;
    int max;
    fscanf(fin,"%d",&max);
    for(i=0;i<max;i++)
      fscanf(fin,"%d",&m[i]);
    q_sort(0,max-1,m);
//quickSort(m,0,max-1);
    for(i=0;i<max;i++)
        fprintf(fout,"%d ",m[i]);
    return 0;

}