#include <iostream>
void sort ( int * array, int low, int high) {
//Insertion sort
for ( int i = low; i < high; i++ ) {
for ( int j = i - 1 ; j >= low; j-- ) {
if ( array[ i] < array [ j] ) {
int holder = array[ j] ;
array[ j] = array[ i] ;
array[ i] = holder;
i-- ;
}
}
}
}
void merge ( int * array, int * sub, int low, int mid, int high) {
//Merge part of mergesort
int a = low;
int b = low;
int c = mid;
while ( ( a < mid) && ( c < high) ) {
if ( array[ a] <= array[ c] ) {
sub[ b] = array[ a] ;
a++ ;
} else {
sub[ b] = array[ c] ;
c++ ;
}
b++ ;
}
while ( a == mid && c < high) {
sub[ b] = array[ c] ;
c++ ;
b++ ;
}
while ( c == high && a < mid) {
sub[ b] = array[ a] ;
a++ ;
b++ ;
}
for ( int d = low; d < high; d++ ) {
array[ d] = sub[ d] ;
}
}
void split ( int * array, int * sub, int low, int high) {
//Split part of mergesort
if ( low < high - 1 ) {
int mid = ( low + high) / 2 ;
split( array, sub, low, mid) ;
split( array, sub, mid, high) ;
if ( ( high - low) > 10 ) {
merge( array, sub, low, mid, high) ;
} else {
sort( array, low, high) ;
}
}
}
int main( )
{
std:: cout << "This is a program that sorts integers.\n " ;
std:: cout << "How many numbers would you like to sort?\n " ;
int num;
std:: cin >> num;
if ( num < 0 ) {
std:: cout << "Invalid amount of numbers.\n " ;
return 0 ;
} else if ( num == 0 ) {
std:: cout << "No numbers to sort.\n " ;
return 0 ;
} else if ( num == 1 ) {
std:: cout << "Please type in the number.\n " ;
std:: cin >> num;
std:: cout << "Your sorted number is: " << num << ".\n " ;
return 0 ;
}
int * array = new int [ num] ;
int * sub = new int [ num] ;
std:: cout << "Please type in the numbers.\n " ;
for ( int i = 0 ; i < num; i++ ) {
std:: cin >> array[ i] ;
}
split( array, sub, 0 , num) ;
std:: cout << "Your sorted numbers are: " ;
for ( int i = 0 ; i < num; i++ ) {
std:: cout << array[ i] ;
if ( i ! = num - 1 ) {
std:: cout << ", " ;
} else {
std:: cout << ".\n " ;
}
}
delete [ ] array;
delete [ ] sub;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdm9pZCBzb3J0IChpbnQgKmFycmF5LCBpbnQgbG93LCBpbnQgaGlnaCkgewogICAgLy9JbnNlcnRpb24gc29ydAogICAgZm9yIChpbnQgaSA9IGxvdzsgaSA8IGhpZ2g7IGkrKykgewogICAgICAgIGZvciAoaW50IGogPSBpIC0gMTsgaiA+PSBsb3c7IGotLSkgewogICAgICAgICAgICBpZiAoYXJyYXlbaV0gPCBhcnJheSBbal0pIHsKICAgICAgICAgICAgICAgIGludCBob2xkZXIgPSBhcnJheVtqXTsKICAgICAgICAgICAgICAgIGFycmF5W2pdID0gYXJyYXlbaV07CiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IGhvbGRlcjsKICAgICAgICAgICAgICAgIGktLTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQp2b2lkIG1lcmdlIChpbnQgKmFycmF5LCBpbnQgKnN1YiwgaW50IGxvdywgaW50IG1pZCwgaW50IGhpZ2gpIHsKICAgIC8vTWVyZ2UgcGFydCBvZiBtZXJnZXNvcnQKICAgIGludCBhID0gbG93OwogICAgaW50IGIgPSBsb3c7CiAgICBpbnQgYyA9IG1pZDsKCiAgICB3aGlsZSAoKGEgPCBtaWQpICYmIChjIDwgaGlnaCkpIHsKICAgICAgICBpZiAoYXJyYXlbYV0gPD0gYXJyYXlbY10pIHsKICAgICAgICAgICAgc3ViW2JdID0gYXJyYXlbYV07CiAgICAgICAgICAgIGErKzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdWJbYl0gPSBhcnJheVtjXTsKICAgICAgICAgICAgYysrOwogICAgICAgIH0KICAgICAgICBiKys7CiAgICB9CiAgICB3aGlsZSAoYSA9PSBtaWQgJiYgYyA8IGhpZ2gpIHsKICAgICAgICBzdWJbYl0gPSBhcnJheVtjXTsKICAgICAgICBjKys7CiAgICAgICAgYisrOwogICAgfQogICAgd2hpbGUgKGMgPT0gaGlnaCAmJiBhIDwgbWlkKSB7CiAgICAgICAgc3ViW2JdID0gYXJyYXlbYV07CiAgICAgICAgYSsrOwogICAgICAgIGIrKzsKICAgIH0KICAgIGZvciAoaW50IGQgPSBsb3c7IGQgPCBoaWdoOyBkKyspIHsKICAgICAgICBhcnJheVtkXSA9IHN1YltkXTsKICAgIH0KfQp2b2lkIHNwbGl0IChpbnQgKmFycmF5LCBpbnQgKnN1YiwgaW50IGxvdywgaW50IGhpZ2gpIHsKICAgIC8vU3BsaXQgcGFydCBvZiBtZXJnZXNvcnQKICAgIGlmIChsb3cgPCBoaWdoIC0gMSkgewogICAgICAgIGludCBtaWQgPSAobG93ICsgaGlnaCkgLyAyOwogICAgICAgIHNwbGl0KGFycmF5LCBzdWIsIGxvdywgbWlkKTsKICAgICAgICBzcGxpdChhcnJheSwgc3ViLCBtaWQsIGhpZ2gpOwogICAgICAgIGlmICgoaGlnaCAtIGxvdykgPiAxMCl7CiAgICAgICAgICAgIG1lcmdlKGFycmF5LCBzdWIsIGxvdywgbWlkLCBoaWdoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzb3J0KGFycmF5LCBsb3csIGhpZ2gpOwogICAgICAgIH0KCiAgICB9Cn0KCmludCBtYWluKCkKewogICAgc3RkOjpjb3V0IDw8ICJUaGlzIGlzIGEgcHJvZ3JhbSB0aGF0IHNvcnRzIGludGVnZXJzLlxuIjsKICAgIHN0ZDo6Y291dCA8PCAiSG93IG1hbnkgbnVtYmVycyB3b3VsZCB5b3UgbGlrZSB0byBzb3J0P1xuIjsKICAgIGludCBudW07CiAgICBzdGQ6OmNpbiA+PiBudW07CiAgICBpZiAobnVtIDwgMCkgewogICAgICAgIHN0ZDo6Y291dCA8PCAiSW52YWxpZCBhbW91bnQgb2YgbnVtYmVycy5cbiI7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9IGVsc2UgaWYgKG51bSA9PSAwKSB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJObyBudW1iZXJzIHRvIHNvcnQuXG4iOwogICAgICAgIHJldHVybiAwOwogICAgfSBlbHNlIGlmIChudW0gPT0gMSkgewogICAgICAgIHN0ZDo6Y291dCA8PCAiUGxlYXNlIHR5cGUgaW4gdGhlIG51bWJlci5cbiI7CiAgICAgICAgc3RkOjpjaW4gPj4gbnVtOwogICAgICAgIHN0ZDo6Y291dCA8PCAiWW91ciBzb3J0ZWQgbnVtYmVyIGlzOiAiIDw8IG51bSA8PCAiLlxuIjsKICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIGludCAqIGFycmF5ID0gbmV3IGludCBbbnVtXTsKICAgIGludCAqIHN1YiA9IG5ldyBpbnQgW251bV07CiAgICBzdGQ6OmNvdXQgPDwgIlBsZWFzZSB0eXBlIGluIHRoZSBudW1iZXJzLlxuIjsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKICAgICAgICBzdGQ6OmNpbiA+PiBhcnJheVtpXTsKICAgIH0KICAgIHNwbGl0KGFycmF5LCBzdWIsIDAsIG51bSk7CiAgICBzdGQ6OmNvdXQgPDwgIllvdXIgc29ydGVkIG51bWJlcnMgYXJlOiAiOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW07IGkrKykgewogICAgICAgIHN0ZDo6Y291dCA8PCBhcnJheVtpXTsKICAgICAgICBpZiAoaSAhPSBudW0gLSAxKSB7CiAgICAgICAgICAgIHN0ZDo6Y291dCA8PCAiLCAiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0ZDo6Y291dCA8PCAiLlxuIjsKICAgICAgICB9CiAgICB9CiAgICBkZWxldGVbXSBhcnJheTsKICAgIGRlbGV0ZVtdIHN1YjsKCiAgICByZXR1cm4gMDsKCn0=
stdout
This is a program that sorts integers.
How many numbers would you like to sort?
Please type in the numbers.
Your sorted numbers are: 0, 0, 1, 1, 1, 1, 2, 3, 3, 3, 4, 4, 5, 5, 5, 7, 7, 7, 8, 9, 9, 9.