Pagini recente » Cod sursa (job #164205) | Cod sursa (job #1413493) | Cod sursa (job #2091536) | Cod sursa (job #2620597) | Cod sursa (job #2706940)
#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 pos = left + 1;
int pivot_pos = left + 1;
while (pos <= right) {
if (arr[pos] <= pivot) {
swap(arr[pos], arr[pivot_pos]);
pivot_pos++;
}
pos++;
}
pivot_pos--;
arr[left] = arr[pivot_pos];
arr[pivot_pos] = pivot;
quicksort(arr, left, pivot_pos - 1);
quicksort(arr, pivot_pos + 1, right);
}
*/
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 arr_pos = left;
int less_pos = left;
int greater_pos = right;
while (arr_pos <= greater_pos) {
if (arr[arr_pos] < pivot) {
swap(arr[arr_pos], arr[less_pos]);
less_pos++;
arr_pos++;
} else if (arr[arr_pos] > pivot) {
swap(arr[arr_pos], arr[greater_pos]);
greater_pos--;
} else {
arr_pos++;
}
}
quicksort(arr, left, less_pos - 1);
quicksort(arr, greater_pos + 1, 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;
}