void sort (int *, unsigned);
void sort (int * array, unsigned arrayLength) {
int * first = array;
int * last = array + (arrayLength - 1);
int * current = first;
int temp;
while (first != last) {
if (*first < *last) {
temp = *first;
*first = *last;
*last = temp;
current = (current == first) ? last : first;
}
if (current == last)
first ++;
else
last --;
}
if ((current - array) > 1)
if ((current - array) == 2) {
if (*array < array[1]) {
temp = *array;
*array = array[1];
array[1] = *array;
}
} else
sort(array, current - array);
if ((current - array) < (arrayLength - 2))
if ((current - array) == (arrayLength - 3)) {
if (current[1] < current[2]) {
temp = current[1];
current[1] = current[2];
current[2] = temp;
}
} else
sort(current + 1, arrayLength - 1 - (current - array));
}
Comments