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: }