Pagini recente » Cod sursa (job #1490346) | Cod sursa (job #426873) | Cod sursa (job #373046) | Cod sursa (job #2056010) | Cod sursa (job #1232641)
#include <fstream>
#include <cstdlib>
#include <ctime>
#include <iostream>
#define SIZE 500000
#define RANDOM(a, b) ((a) + (rand() % ((b) - (a) + 1)))
using namespace std;
void swap(int A[], int i, int j)
{
int aux = A[i];
A[i] = A[j];
A[j] = aux;
}
void insertion_sort(int A[], int left, int right)
{
for (int i = left + 1; i <= right; ++i)
{
int e = A[i];
int j = i;
while (j > 0 && A[j-1] > e)
{
A[j] = A[j-1];
--j;
}
A[j] = e;
}
}
int partition(int A[], int left, int right)
{
int randomIndex = RANDOM(left, right);
swap(A, left, randomIndex);
int pivot = A[left];
while (left <= right)
{
while (A[left] < pivot) ++left;
while (A[right] > pivot) --right;
if (left <= right) swap(A, left++, right--);
}
return right;
}
void quicksort(int A[], int left, int right)
{
if (left < right)
{
int p = partition(A, left, right);
quicksort(A, left, p);
quicksort(A, p + 1, right);
}
}
int main()
{
ifstream ifs("algsort.in");
ofstream ofs("algsort.out");
srand(time(NULL));
int A[SIZE], n;
ifs >> n;
for (int i = 0; i < n; ++i)
ifs >> A[i];
//insertion_sort(A, 0, n-1);
quicksort(A, 0, n-1);
for (int i = 0; i < n; ++i)
ofs << A[i] << " ";
return 0;
}