01: #include <iostream> 02: #include <vector> 03: #include <cstdlib> 04: #include <ctime> 06: using namespace std; 08: /** 09: Swaps two integers. 10: @param x the first integer to swap 11: @param y the second integer to swap 12: */ 13: void swap(int& x, int& y) 14: { int temp = x; 16: x = y; 17: y = temp; 18: } 20: /** 21: Gets the position of the smallest element in a vector range. 22: @param a the vector 23: @param from the beginning of the range 24: @param to the beginning of the range 25: @return the position of the smallest element in 26: the range a[from]...a[to] 27: */ 28: int min_position(vector<int>& a, int from, int to) 29: { int min_pos = from; 31: int i; 32: for (i = from + 1; i <= to; i++) 33: if (a[i] < a[min_pos]) min_pos = i; 34: return min_pos; 35: } 37: /** 38: Sorts a vector using the selection sort algorithm 39: @param a the vector to sort 40: */ 41: void selection_sort(vector<int>& a) 42: { int next; /* the next position to be set to the minimum */ 44: 45: for (next = 0; next < a.size() - 1; next++) 46: { /* find the position of the minimum */ 48: int min_pos = min_position(a, next, a.size() - 1); 49: if (min_pos != next) 50: swap(a[min_pos], a[next]); 51: } 52: } 54: /** 55: Prints all elements in a vector 56: @param a the vector to print 57: */ 58: void print(vector<int> a) 59: { for (int i = 0; i < a.size(); i++) 61: cout << a[i] << " "; 62: cout << "\n"; 63: } 65: /** 66: Sets the seed of the random number generator. 67: */ 68: void rand_seed() 69: { int seed = static_cast<int>(time(0)); 71: srand(seed); 72: } 74: /** 75: Computes a random integer in a range. 76: @param a the bottom of the range 77: @param b the top of the range 78: @return a random integer x, a <= x and x <= b 79: */ 80: int rand_int(int a, int b) 81: { return a + rand() % (b - a + 1); } 84: 85: int main() 86: { rand_seed(); 88: vector<int> v(20); 89: for (int i = 0; i < v.size(); i++) 90: v[i] = rand_int(1, 100); 91: print(v); 92: selection_sort(v); 93: print(v); 94: return 0; 95: }