Pagini recente » Cod sursa (job #877699) | Cod sursa (job #1363930) | Cod sursa (job #2468949) | Cod sursa (job #461454) | Cod sursa (job #1232600)
#include <fstream>
#include <cstdlib>
#include <ctime>
#define RANDOM(a, b) ((a) + (rand() % ((b) - (a) + 1)))
using namespace std;
inline 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 = generate_random_number(left, right);
swap(A, left, randomIndex);
int pivot = A[left];
int pivot_index = left;
++left;
while (left <= right)
{
while (left <= right && A[left] < pivot) ++left;
while (right >= left && A[right] >= pivot) --right;
if (left < right) swap(A, left++, right--);
}
swap(A, pivot_index, left - 1);
return left - 1;
}
void quicksort(int A[], int left, int right)
{
if (left < right)
{
int p = partition(A, left, right);
quicksort(A, left, p - 1);
quicksort(A, p + 1, right);
}
}
int main()
{
ifstream ifs("algsort.in");
ofstream ofs("algsort.out");
srand(time(NULL));
int A[500000], 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;
}