Pagini recente » Cod sursa (job #2582281) | Clasament preoji_6 | Cod sursa (job #2839899) | Cod sursa (job #2485110) | Cod sursa (job #818705)
Cod sursa(job #818705)
#include <fstream>
using namespace std;
const int too_small = 55;
#define MIN(a, b) (a < b ? a : b)
#define MAX(a, b) (a > b ? a : b)
void insertsort (int *Array, int num_elem) {
for (int i = 1; i < num_elem; i++) {
int elem = Array[i], j;
for (j = i; j > 0 && Array[j - 1] > elem; j--) {
Array[j] = Array[j - 1];
}
Array[j] = elem;
}
}
void quicksort (int* Array, int num_elem) {
if (num_elem < too_small) {
insertsort (Array, num_elem);
return;
}
int first = 0;
int last = num_elem - 1;
int mid = num_elem >> 1;
int pivot = Array[first] >= MIN(Array[last], Array[mid]) && Array[first] <= MAX(Array[last], Array[mid]) ? first :
Array[last] >= MIN(Array[first], Array[mid]) && Array[last] <= MAX(Array[first], Array[mid]) ? last :
mid;
int temp, pivotIndex, pivotValue = Array[pivot];
temp = Array[pivot];
Array[pivot] = Array[num_elem - 1];
Array[num_elem - 1] = temp;
pivotIndex = 0;
for (int i = 0; i < num_elem - 1; i++) {
if (Array[i] < pivotValue) {
temp = Array[pivotIndex];
Array[pivotIndex] = Array[i];
Array[i] = temp;
pivotIndex++;
}
}
temp = Array[pivotIndex];
Array[pivotIndex] = Array[num_elem - 1];
Array[num_elem - 1] = temp;
quicksort(Array, pivotIndex);
quicksort(Array + pivotIndex + 1, num_elem - pivotIndex - 1);
}
int main()
{
// ifstream read ( "algsort.in", ifstream::in);
// ofstream write ( "algsort.out", ofstream::out);
freopen ("algsort.in", "r", stdin);
freopen ("algsort.out", "w", stdout);
int num_elem;
int *Array;
scanf("%d", &num_elem);
Array = new int[num_elem];
for (int i = 0; i < num_elem; i++)
scanf("%d", &Array[i]);
quicksort(Array, num_elem);
for (int i = 0; i < num_elem; i++)
printf ("%dc", Array[i], (i == num_elem - 1 ? '\n' : ' '));
return 0;
}