Pagini recente » Cod sursa (job #1543558) | Cod sursa (job #28031) | Cod sursa (job #2941806) | Cod sursa (job #105548) | Cod sursa (job #2706800)
#include <stdio.h>
#include <vector>
#include <stdlib.h>
using namespace std;
void quicksort(vector<int> & arr, int left, int right) {
if (left >= right) {
return;
}
int rand_index = left + rand() % (right - left + 1);
swap(arr[left], arr[rand_index]);
int pivot = arr[left];
int less_pos = left; // [left, less_pos) < pivot
int equal_pos = left; // [less_pos, equal_pos) = pivot
int arr_pos = right; // [equal_pos, right] > pivot
while (equal_pos <= arr_pos) {
if (arr[equal_pos] < pivot) {
swap(arr[equal_pos], arr[less_pos]);
equal_pos++;
less_pos++;
} else if (arr[equal_pos] > pivot) {
swap(arr[equal_pos], arr[arr_pos]);
arr_pos--;
} else {
equal_pos++;
}
}
quicksort(arr, left, less_pos - 1);
quicksort(arr, equal_pos, right);
}
int main() {
FILE * f;
f = fopen("algsort.in", "r");
int n;
fscanf(f, "%d", &n);
vector<int> arr(n);
for (int i = 0; i < n; i++) {
fscanf(f, "%d", &arr[i]);
}
fclose(f);
quicksort(arr, 0, n - 1);
f = fopen("algsort.out", "w");
for (int i = 0; i < n; i++) {
fprintf(f, "%d ", arr[i]);
}
fclose(f);
return 0;
}