#include <iostream>
struct HighestNumber
{
int number;
int index;
};
void swap(int* array, int i, int j)
{
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
HighestNumber getTheHighestNumber(int* array, int size)
{
int theHighest = 0;
int index = 0;
for (int i = 0; i != size; ++i)
{
if (i == 0)
theHighest = array[0];
if (theHighest < array[i])
{
theHighest = array[i];
index = i;
}
}
return HighestNumber{ theHighest, index };
}
void sortArray(int* array, int size)
{
do
{
for (int i = 0; i < size - 1; ++i)
{
if (array[i] > array[i + 1])
swap(array, i, i + 1);
}
size--;
} while (size > 1);
}
int* algorithm(int* array, int size)
{
int* sortedArray = new int[size];
int currentSortedArrayIndex = 0;
HighestNumber lastResult;
HighestNumber bestResult = getTheHighestNumber(array, size);
do
{
lastResult = bestResult;
sortedArray[currentSortedArrayIndex] = bestResult.number;
currentSortedArrayIndex++;
swap(array, bestResult.index, size - currentSortedArrayIndex);
bestResult = getTheHighestNumber(array, size - currentSortedArrayIndex);
} while (bestResult.number == lastResult.number);
sortArray(array, size - currentSortedArrayIndex);
int toIterate = size - currentSortedArrayIndex;
for (int i = 0; i != toIterate; ++i)
{
sortedArray[currentSortedArrayIndex] = array[i];
currentSortedArrayIndex++;
}
return sortedArray;
}
int main()
{
int times = 0;
std::cin >> times;
for (int i = 0; i != times; ++i)
{
int competitors = 0;
std::cin >> competitors;
int *array = new int[competitors];
for (int j = 0; j != competitors; j++)
std::cin >> array[j];
int *sortedArray = algorithm(array, competitors);
for (int j = 0; j != competitors; j++)
std::cout << sortedArray[j] << " ";
std::cout << std::endl;
delete[] array;
delete[] sortedArray;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IEhpZ2hlc3ROdW1iZXIKewoJaW50IG51bWJlcjsKCWludCBpbmRleDsKfTsKCnZvaWQgc3dhcChpbnQqIGFycmF5LCBpbnQgaSwgaW50IGopCnsKCWludCB0ZW1wID0gYXJyYXlbaV07CglhcnJheVtpXSA9IGFycmF5W2pdOwoJYXJyYXlbal0gPSB0ZW1wOwp9CgpIaWdoZXN0TnVtYmVyIGdldFRoZUhpZ2hlc3ROdW1iZXIoaW50KiBhcnJheSwgaW50IHNpemUpCnsKCWludCB0aGVIaWdoZXN0ID0gMDsKCWludCBpbmRleCA9IDA7Cglmb3IgKGludCBpID0gMDsgaSAhPSBzaXplOyArK2kpCgl7CgkJaWYgKGkgPT0gMCkKCQkJdGhlSGlnaGVzdCA9IGFycmF5WzBdOwoKCQlpZiAodGhlSGlnaGVzdCA8IGFycmF5W2ldKQoJCXsKCQkJdGhlSGlnaGVzdCA9IGFycmF5W2ldOwoJCQlpbmRleCA9IGk7CgkJfQoKCX0KCglyZXR1cm4gSGlnaGVzdE51bWJlcnsgdGhlSGlnaGVzdCwgaW5kZXggfTsKfQoKdm9pZCBzb3J0QXJyYXkoaW50KiBhcnJheSwgaW50IHNpemUpCnsKCWRvCgl7CgkJZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplIC0gMTsgKytpKQoJCXsKCQkJaWYgKGFycmF5W2ldID4gYXJyYXlbaSArIDFdKQoJCQkJc3dhcChhcnJheSwgaSwgaSArIDEpOwoJCX0KCQlzaXplLS07Cgl9IHdoaWxlIChzaXplID4gMSk7Cn0KCmludCogYWxnb3JpdGhtKGludCogYXJyYXksIGludCBzaXplKQp7CglpbnQqIHNvcnRlZEFycmF5ID0gbmV3IGludFtzaXplXTsKCWludCBjdXJyZW50U29ydGVkQXJyYXlJbmRleCA9IDA7CgoJSGlnaGVzdE51bWJlciBsYXN0UmVzdWx0OwoJSGlnaGVzdE51bWJlciBiZXN0UmVzdWx0ID0gZ2V0VGhlSGlnaGVzdE51bWJlcihhcnJheSwgc2l6ZSk7CgoJZG8KCXsKCQlsYXN0UmVzdWx0ID0gYmVzdFJlc3VsdDsKCgkJc29ydGVkQXJyYXlbY3VycmVudFNvcnRlZEFycmF5SW5kZXhdID0gYmVzdFJlc3VsdC5udW1iZXI7CgkJY3VycmVudFNvcnRlZEFycmF5SW5kZXgrKzsKCgkJc3dhcChhcnJheSwgYmVzdFJlc3VsdC5pbmRleCwgc2l6ZSAtIGN1cnJlbnRTb3J0ZWRBcnJheUluZGV4KTsKCgkJYmVzdFJlc3VsdCA9IGdldFRoZUhpZ2hlc3ROdW1iZXIoYXJyYXksIHNpemUgLSBjdXJyZW50U29ydGVkQXJyYXlJbmRleCk7CgoJfSB3aGlsZSAoYmVzdFJlc3VsdC5udW1iZXIgPT0gbGFzdFJlc3VsdC5udW1iZXIpOwoKCXNvcnRBcnJheShhcnJheSwgc2l6ZSAtIGN1cnJlbnRTb3J0ZWRBcnJheUluZGV4KTsKCgoJaW50IHRvSXRlcmF0ZSA9IHNpemUgLSBjdXJyZW50U29ydGVkQXJyYXlJbmRleDsKCWZvciAoaW50IGkgPSAwOyBpICE9IHRvSXRlcmF0ZTsgKytpKQoJewoJCXNvcnRlZEFycmF5W2N1cnJlbnRTb3J0ZWRBcnJheUluZGV4XSA9IGFycmF5W2ldOwoJCWN1cnJlbnRTb3J0ZWRBcnJheUluZGV4Kys7Cgl9CgoJcmV0dXJuIHNvcnRlZEFycmF5OwoKCn0KCmludCBtYWluKCkKewoJaW50IHRpbWVzID0gMDsKCXN0ZDo6Y2luID4+IHRpbWVzOwoKCWZvciAoaW50IGkgPSAwOyBpICE9IHRpbWVzOyArK2kpCgl7CgkJaW50IGNvbXBldGl0b3JzID0gMDsKCQlzdGQ6OmNpbiA+PiBjb21wZXRpdG9yczsKCQlpbnQgKmFycmF5ID0gbmV3IGludFtjb21wZXRpdG9yc107CgkJZm9yIChpbnQgaiA9IDA7IGogIT0gY29tcGV0aXRvcnM7IGorKykKCQkJc3RkOjpjaW4gPj4gYXJyYXlbal07CgoJCWludCAqc29ydGVkQXJyYXkgPSBhbGdvcml0aG0oYXJyYXksIGNvbXBldGl0b3JzKTsKCgkJZm9yIChpbnQgaiA9IDA7IGogIT0gY29tcGV0aXRvcnM7IGorKykKCQkJc3RkOjpjb3V0IDw8IHNvcnRlZEFycmF5W2pdIDw8ICIgIjsKCgkJc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKCgkJZGVsZXRlW10gYXJyYXk7CgkJZGVsZXRlW10gc29ydGVkQXJyYXk7Cgl9CgoJcmV0dXJuIDA7Cn0=