Pagini recente » Cod sursa (job #1096682) | Cod sursa (job #2712733) | Cod sursa (job #684610) | Cod sursa (job #113616) | Cod sursa (job #645133)
Cod sursa(job #645133)
#include <stdio.h>
#include <stdlib.h>
#define SIZE(x, y) y - x + 1
#define SWAP(x, y) x^=y^=x^=y
int partition(unsigned long int *arr, unsigned int lo, unsigned int hi)
{
unsigned int pivot = arr[lo + (hi - lo + 1)/2];
while(lo < hi)
{
while(arr[lo] < pivot) ++lo;
while(arr[hi] > pivot) --hi;
if(lo < hi)
{
SWAP(arr[lo], arr[hi]);
++lo;
--hi;
}
}
return lo;
}
void sort(unsigned long int *arr, unsigned int lo, unsigned int hi)
{
unsigned int index;
if(lo < hi)
{
index = partition(arr, lo, hi);
sort(arr, lo, index - 1);
sort(arr, index, hi);
}
}
void quickSort(unsigned long int *arr, int size)
{
sort(arr, 0, size-1);
}
int main()
{
unsigned long int *arr = NULL;
unsigned int i;
unsigned int size;
FILE *fpi = fopen("algsort.in", "r");
FILE *fpo = fopen("algsort.out", "w");
fscanf(fpi, "%u", &size);
arr = (unsigned long int*)malloc(sizeof(unsigned long int) * size);
for(i = 0; i < size; ++i)
fscanf(fpi, "%u", &arr[i]);
quickSort(arr, size);
for(i = 0; i < size; ++i)
fprintf(fpo, "%u ", arr[i]);
fclose(fpo);
fclose(fpi);
free(arr);
return 0;
}