Pagini recente » Cod sursa (job #2662882) | Cod sursa (job #1220891) | Cod sursa (job #3208811) | Cod sursa (job #896419) | Cod sursa (job #2061723)
#include <fstream>
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
const int Nmax = 500005;
int n,elements[Nmax];
int orderElementsAccordingToRandElement(int leftIndex, int rightIndex, int fixedValue)
{
int leftPointer = leftIndex, rightPointer = rightIndex;
while(true)
{
while(elements[leftPointer] < fixedValue)
++leftPointer;
while(elements[rightPointer] > fixedValue)
--rightPointer;
if(leftPointer < rightPointer)
swap(elements[leftPointer++], elements[rightPointer--]);
else
return leftPointer;
}
}
void quickSort(int leftIndex, int rightIndex)
{
if(leftIndex >= rightIndex)
return;
int randElement = elements[leftIndex + rand() % (rightIndex - leftIndex + 1)];
int finalElementPosition = orderElementsAccordingToRandElement(leftIndex, rightIndex, randElement);
//cout << randElement << " " << finalElementPosition << "\n";
quickSort(leftIndex, finalElementPosition - 1);
quickSort(finalElementPosition, rightIndex);
}
int main()
{
ifstream cin("algsort.in");
ofstream cout("algsort.out");
cin >> n;
for(int i=1; i<=n; ++i)
cin >> elements[i];
srand(time(0));
quickSort(1,n);
for(int i=1; i<=n; ++i)
cout << elements[i] << " ";
cout << "\n";
return 0;
}