#include <iostream>
using namespace std;
void fill_array( int a[ ] , int size, int & number_used) ;
void sort( int a[ ] , int number_used) ;
void swap_values( int & v1, int & v2) ;
//Interchanges the values of v1 and v2.
int index_of_smallest( const int a[ ] , int start_index, int number_used) ;
int main( )
{
cout << "Program to sort numbers in ascending order.\n " ;
int sample_array[ 10 ] , number_used;
fill_array( sample_array, 10 , number_used) ;
sort( sample_array, number_used) ;
cout << "In sorted order the numbers are:\n " ;
for ( int index = 0 ; index < number_used; index++ )
cout << sample_array[ index] << " " ;
cout << endl;
return 0 ;
}
//Uses iostream:
void fill_array( int a[ ] , int size, int & number_used)
{
cout << "Enter up to " << size << " nonnegative whole numbers.\n "
<< "Mark the end of the list with a negative number.\n " ;
int next, index = 0 ;
cin >> next;
while ( ( next >= 0 ) && ( index < size) )
{
a[ index] = next;
index++ ;
cin >> next;
}
number_used = index;
}
void sort( int a[ ] , int number_used)
{
int index_of_next_smallest;
for ( int index = 0 ; index < number_used - 1 ; index++ )
{
//Place the correct value in a[index]:
index_of_next_smallest = index_of_smallest( a, index, number_used) ;
swap_values( a[ index] , a[ index_of_next_smallest] ) ;
//a[0] <= a[1] <=...<= a[index] are the smallest of the original array
//elements. The rest of the elements are in the remaining positions.
}
}
void swap_values( int & v1, int & v2)
{
int temp;
temp = v1;
v1 = v2;
v2 = temp;
}
int index_of_smallest( const int a[ ] , int start_index, int number_used)
{
int min = a[ start_index] ,
index_of_min = start_index;
for ( int index = start_index + 1 ; index < number_used; index++ )
if ( a[ index] < min)
{
min = a[ index] ;
index_of_min = index;
//min is the smallest of a[start_index] through a[index]
}
return index_of_min;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdm9pZCBmaWxsX2FycmF5KGludCBhWyBdLCBpbnQgc2l6ZSwgaW50JiBudW1iZXJfdXNlZCk7CgoKdm9pZCBzb3J0KGludCBhWyBdLCBpbnQgbnVtYmVyX3VzZWQpOwoKCnZvaWQgc3dhcF92YWx1ZXMoaW50JiB2MSwgaW50JiB2Mik7Ci8vSW50ZXJjaGFuZ2VzIHRoZSB2YWx1ZXMgb2YgdjEgYW5kIHYyLgoKaW50IGluZGV4X29mX3NtYWxsZXN0KGNvbnN0IGludCBhWyBdLCBpbnQgc3RhcnRfaW5kZXgsIGludCBudW1iZXJfdXNlZCk7CgoKaW50IG1haW4oICkKewogICAgY291dCA8PCAiUHJvZ3JhbSB0byBzb3J0IG51bWJlcnMgaW4gYXNjZW5kaW5nIG9yZGVyLlxuIjsKCiAgICBpbnQgc2FtcGxlX2FycmF5WzEwXSwgbnVtYmVyX3VzZWQ7CiAgICBmaWxsX2FycmF5KHNhbXBsZV9hcnJheSwgMTAsIG51bWJlcl91c2VkKTsKICAgIHNvcnQoc2FtcGxlX2FycmF5LCBudW1iZXJfdXNlZCk7CgogICAgY291dCA8PCAiSW4gc29ydGVkIG9yZGVyIHRoZSBudW1iZXJzIGFyZTpcbiI7CiAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgbnVtYmVyX3VzZWQ7IGluZGV4KyspCiAgICAgICAgY291dCA8PCBzYW1wbGVfYXJyYXlbaW5kZXhdIDw8ICIgIjsKICAgIGNvdXQgPDwgZW5kbDsKCiAgICByZXR1cm4gMDsKfQoKLy9Vc2VzIGlvc3RyZWFtOgp2b2lkIGZpbGxfYXJyYXkoaW50IGFbIF0sIGludCBzaXplLCBpbnQmIG51bWJlcl91c2VkKQp7CiAgICBjb3V0IDw8ICJFbnRlciB1cCB0byAiIDw8IHNpemUgPDwgIiBub25uZWdhdGl2ZSB3aG9sZSBudW1iZXJzLlxuIgogICAgICAgICAgICAgICAgPDwgIk1hcmsgdGhlIGVuZCBvZiB0aGUgbGlzdCB3aXRoIGEgbmVnYXRpdmUgbnVtYmVyLlxuIjsKCiAgICBpbnQgbmV4dCwgaW5kZXggPSAwOwogICAgY2luID4+IG5leHQ7CiAgICB3aGlsZSAoKG5leHQgPj0gMCkgJiYgKGluZGV4IDwgc2l6ZSkpCiAgICB7CiAgICAgICAgYVtpbmRleF0gPSBuZXh0OwogICAgICAgIGluZGV4Kys7CiAgICAgICAgY2luID4+IG5leHQ7CiAgICB9CgogICAgbnVtYmVyX3VzZWQgPSBpbmRleDsKfQoKdm9pZCBzb3J0KGludCBhWyBdLCBpbnQgbnVtYmVyX3VzZWQpCnsKICAgIGludCBpbmRleF9vZl9uZXh0X3NtYWxsZXN0OwogICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IG51bWJlcl91c2VkIC0gMTsgaW5kZXgrKykKICAgIHsKICAgICAgICAvL1BsYWNlIHRoZSBjb3JyZWN0IHZhbHVlIGluIGFbaW5kZXhdOgogICAgICAgIGluZGV4X29mX25leHRfc21hbGxlc3QgPSBpbmRleF9vZl9zbWFsbGVzdChhLCBpbmRleCwgbnVtYmVyX3VzZWQpOwogICAgICAgIHN3YXBfdmFsdWVzKGFbaW5kZXhdLCBhW2luZGV4X29mX25leHRfc21hbGxlc3RdKTsKICAgICAgICAvL2FbMF0gPD0gYVsxXSA8PS4uLjw9IGFbaW5kZXhdIGFyZSB0aGUgc21hbGxlc3Qgb2YgdGhlIG9yaWdpbmFsIGFycmF5CiAgICAgICAgLy9lbGVtZW50cy4gVGhlIHJlc3Qgb2YgdGhlIGVsZW1lbnRzIGFyZSBpbiB0aGUgcmVtYWluaW5nIHBvc2l0aW9ucy4KICAgIH0KfQoKdm9pZCBzd2FwX3ZhbHVlcyhpbnQmIHYxLCBpbnQmIHYyKQp7CiAgICBpbnQgdGVtcDsKICAgIHRlbXAgPSB2MTsKICAgIHYxID0gdjI7CiAgICB2MiA9IHRlbXA7Cn0KCgppbnQgaW5kZXhfb2Zfc21hbGxlc3QoY29uc3QgaW50IGFbIF0sIGludCBzdGFydF9pbmRleCwgaW50IG51bWJlcl91c2VkKQp7CiAgICBpbnQgbWluID0gYVtzdGFydF9pbmRleF0sCiAgICBpbmRleF9vZl9taW4gPSBzdGFydF9pbmRleDsKICAgIGZvciAoaW50IGluZGV4ID0gc3RhcnRfaW5kZXggKyAxOyBpbmRleCA8IG51bWJlcl91c2VkOyBpbmRleCsrKQogICAgICAgIGlmIChhW2luZGV4XSA8IG1pbikKICAgICAgICB7CiAgICAgICAgICAgIG1pbiA9IGFbaW5kZXhdOwogICAgICAgICAgICBpbmRleF9vZl9taW4gPSBpbmRleDsKICAgICAgICAgICAgLy9taW4gaXMgdGhlIHNtYWxsZXN0IG9mIGFbc3RhcnRfaW5kZXhdIHRocm91Z2ggYVtpbmRleF0KICAgICAgICB9CgogICAgcmV0dXJuIGluZGV4X29mX21pbjsKfQo=