Pagini recente » Cod sursa (job #899260) | Cod sursa (job #803992) | Cod sursa (job #477605) | Cod sursa (job #2772102) | Cod sursa (job #818683)
Cod sursa(job #818683)
#include <fstream>
using namespace std;
const int too_small = 25;
#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] > Array[j]; 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;
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] < Array[num_elem - 1]) {
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);
int num_elem;
int *Array;
read >> num_elem;
Array = new int[num_elem];
for (int i = 0; i < num_elem; i++)
read >> Array[i];
quicksort(Array, num_elem);
for (int i = 0; i < num_elem; i++)
write << Array[i] << (i == num_elem - 1 ? "\n" : " ");
return 0;
}