Pagini recente » Cod sursa (job #2156243) | Cod sursa (job #555017) | Cod sursa (job #1132910) | Cod sursa (job #1849903) | Cod sursa (job #808290)
Cod sursa(job #808290)
#include <stdio.h>
#include <stdlib.h>
#include <vector>
using namespace std;
const char infile[] = "algsort.in";
const char outfile[] = "algsort.out";
void readData(vector <int> &array) {
FILE *f = fopen(infile, "rt");
int size, value;
fscanf(f, "%d", &size);
for(int i = 0; i < size; ++i) {
fscanf(f, "%d", &value);
array.push_back(value);
}
}
int partition(vector <int> &array, int beginIndex, int endIndex) {
int left = beginIndex - 1, right = endIndex + 1;
int randomValue = array[beginIndex + rand() % (endIndex - beginIndex + 1)];
while(1) {
do left++;
while(array[left] < randomValue);
do right--;
while(array[right] > randomValue);
if(left < right)
swap(array[left], array[right]);
else
return right;
}
return left;
}
void quickSort(vector <int> &array, int beginIndex, int endIndex) {
if(beginIndex < endIndex) {
int pivot = partition(array, beginIndex, endIndex);
quickSort(array, beginIndex, pivot);
quickSort(array, pivot + 1, endIndex);
}
}
void writeData(vector <int> &array) {
FILE *f = fopen(outfile, "wt");
for(int i = 0; i < array.size(); ++i)
fprintf(f, "%d ", array[i]);
}
int main() {
vector <int> array;
readData(array);
quickSort(array, 0, array.size() - 1);
writeData(array);
return 0;
}