Pagini recente » Cod sursa (job #2465505) | Cod sursa (job #2364318) | Cod sursa (job #2667228) | Cod sursa (job #2229891) | Cod sursa (job #2057828)
/// QuickSort
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
const int N = 500000;
int v[N];
int n;
void print(){
for(int i=0; i<n; ++i)
out<<v[i]<<" ";
out<<"\n";
}
int lowerThanPivot[N], greaterThanPivot[N];
int movePivot(int leftIndex, int rightIndex){ /// Consider "leftIndex" the pivot
int lengthLower = 0, lengthGreater = 0;
int pivot = v[leftIndex];
for(int i=leftIndex+1; i <= rightIndex; ++i)
if(v[i] < pivot)
lowerThanPivot[lengthLower++] = v[i];
else
greaterThanPivot[lengthGreater++] = v[i];
int pivotIndex = leftIndex + lengthLower;
for(int i=leftIndex; i<pivotIndex; ++i)
v[i] = lowerThanPivot[i - leftIndex];
v[pivotIndex] = pivot;
for(int i=pivotIndex + 1; i <= rightIndex; ++i)
v[i] = greaterThanPivot[i - pivotIndex - 1];
return pivotIndex;
}
void quickSort(int leftIndex, int rightIndex){
if(leftIndex >= rightIndex)
return;
int pivotIndex = movePivot(leftIndex, rightIndex);
//cout<<leftIndex<<", "<<rightIndex<<" | "<<pivotIndex<<"\n";
//print();
quickSort(leftIndex, pivotIndex);
quickSort(pivotIndex+1, rightIndex);
}
int main()
{
in>>n;
for(int i=0; i<n; ++i)
in>>v[i];
//print();
quickSort(0, n-1);
print();
return 0;
}