Program using Bubble and Selection sort

Hey guys. I am working on writing code that will swap using both bubbleSort and selectionSort. However, for the two functions, I have to use two other functions (lessThan or greaterThan and swapItems). The teacher wrote the whole code other than bubbleSort and selectionSort, where he just filled the function with a comment on what needs to go there.

The assignment reads:

Implement bubble sort and selection sort as they are implemented in the book, but instead of swapping items directly, use the swapItems function implemented below and instead of comparing values directly, use the lessThan and greaterThan functions below.

- For example, if you want to swap the items in array arr at indexes i and j, you would write the statement swapItems(arr, i, j)

- If you want to compare two values val1 and val2 you would use the expression lessThan(val1, val2) or greaterThan(val1, val2) to replace the expressions val1< val2 or val1> val2

- You do not have to replace comparisons of indexes like i < size, just comparisons of values in the array like arr[i]<arr[j]

------------

I've made the functions for bubbleSort and selectionSort, but they aren't actually doing anything. There's no change in the output of the program compared to what I had before I made the functions. I'm not sure if I'm missing something totally obvious or if I'm actually not doing any of it correctly. Any help is greatly appreciated.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
  #include <iostream>
#include <cstdlib>
#include <ctime>
#include <iomanip>
using namespace std;

void fillArray(int[], int);
void displayArray(int[], int);
void copyArray(int[], int[], int);
void bubbleSort(int[], int);
void selectionSort(int[], int);
void swapItems(int[], int, int);
bool lessThan(int, int);
bool greaterThan(int, int);
void resetStats();
void displayStats();

int numSwaps = 0;
int numComparisons = 0;

int main()
{
	const int SIZE = 100;
	int bubbleArray[SIZE];
	int selectionArray[SIZE];

	// Fill the arrays with identical sets of random numbers
	fillArray(bubbleArray, SIZE);
	copyArray(bubbleArray, selectionArray, SIZE);

	// Display the original contents of the array
	cout << "Unsorted Array" << endl;
	cout << "--------------" << endl;
	displayArray(bubbleArray, SIZE);
	cout << endl;

	// Perform Bubble Sort and display results
	resetStats();
	bubbleSort(bubbleArray, SIZE);
	cout << "BubbleSort" << endl;
	cout << "----------" << endl;
	displayArray(bubbleArray, SIZE);
	cout << endl;
	displayStats();
	cout << endl;

	// Perform Selection Sort and display results
	resetStats();
	selectionSort(selectionArray, SIZE);
	cout << "SelectionSort" << endl;
	cout << "-------------" << endl;
	displayArray(selectionArray, SIZE);
	cout << endl;
	displayStats();
	cout << endl;

	system("pause");
	return 0;
}

// Array management functions
void fillArray(int arr[], int size)
{
	unsigned int seed = static_cast<int>(time(0));
	srand(seed);
	for (int index = 0; index < size; index++)
	{
		arr[index] = rand() % 1000;
	}
}

void copyArray(int source[], int destination[], int size)
{
	for (int index = 0; index < size; index++)
	{
		destination[index] = source[index];
	}
}

void displayArray(int arr[], int size)
{
	for (int index = 0; index < size; index++)
	{
		cout << setw(4) << arr[index];
		if (index % 10 == 9)
			cout << endl;
	}
}

// Bubble Sort algorithm
void bubbleSort(int arr[], int size)
{
int maxElement = 0;
	for (int index = 0; index < maxElement; maxElement--)
	{
		if (greaterThan(index, index + 1))
		{
			swapItems(arr, index, index + 1);
		}
	}

        // implement bubbleSort using the greaterThan
	// and swapItems functions



// Selection Sort algorithm
void selectionSort(int arr[], int size)
{
int maxElement = 0;
	for (int index = 0; index < maxElement; maxElement--)
	{
		if (lessThan(index, index + 1))
		{
			swapItems(arr, index, index + 1);
		}
	}
}
	// implement selectionSort using the lessThan
	// and swapItems functions
}

// Basic operations with counters
void swapItems(int arr[], int index1, int index2)
{
	numSwaps++;
	int temp = arr[index1];
	arr[index1] = arr[index2];
	arr[index2] = temp;
}

bool lessThan(int num1, int num2)
{
	numComparisons++;
	return num1 < num2;
}

bool greaterThan(int num1, int num2)
{
	numComparisons++;
	return num1 > num2;
}

// Functions for managing statistics
void resetStats()
{
	numSwaps = 0;
	numComparisons = 0;
}

void displayStats()
{
	cout << "Swaps: " << numSwaps << " Comparisons: " << numComparisons << endl;
}
Last edited on
Alright, so I found where the issue is, but I am not sure how to fix it.

My teacher wants us to use a function for the if loop in both the parameters and the statement within. I changed the parameters to the actual greaterThan statement and left the swapItems function in the statement. It works now.

This is the changed function:

1
2
3
4
5
6
7
8
9
10
11
12
13
int maxElement;
	int index;

	for (maxElement = size - 1; maxElement > 0; maxElement--)
	{
		for (index = 0; index < maxElement; index++)
		{
			if (arr[index] > arr[index +1])
			{
				swapItems(arr, index, index + 1);
			}
		}
	}


What I need help with is how to put a function in place of the if parameters... where I have arr[index] > arr[index + 1]

The function that I have for that right now is:

1
2
3
4
5
bool greaterThan(int num1, int num2)
{
	numComparisons++;
	return num1 > num2;
}


This function was given to me by the teacher, so I think the issue is with how I am placing it/ what I'm putting in for num1 and num2.

Thank you in advance for any advice you have to offer!
Last edited on
AAAAAAAND I did it!

Sorry for posting when I was able to figure it out. But it was helpful to write everything down and see what I was doing. Maybe this can help someone else in the future.

I'm not really sure what I was thinking, but I just put arr[index] in place of num1 and arr[index + 1] in place of num2 when calling the function. Here's the complete program!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
// Allison Johnson
// Program to compare Selection Sort and Bubble Sort
// CSCI 1010
// Practice Problems 12

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <iomanip>
using namespace std;

void fillArray(int[], int);
void displayArray(int[], int);
void copyArray(int[], int[], int);
void bubbleSort(int[], int);
void selectionSort(int[], int);
void swapItems(int[], int, int);
bool lessThan(int, int);
bool greaterThan(int, int);
void resetStats();
void displayStats();

int numSwaps = 0;
int numComparisons = 0;

int main()
{
	const int SIZE = 100;
	int bubbleArray[SIZE];
	int selectionArray[SIZE];

	// Fill the arrays with identical sets of random numbers
	fillArray(bubbleArray, SIZE);
	copyArray(bubbleArray, selectionArray, SIZE);

	// Display the original contents of the array
	cout << "Unsorted Array" << endl;
	cout << "--------------" << endl;
	displayArray(bubbleArray, SIZE);
	cout << endl;

	// Perform Bubble Sort and display results
	resetStats();
	bubbleSort(bubbleArray, SIZE);
	cout << "BubbleSort" << endl;
	cout << "----------" << endl;
	displayArray(bubbleArray, SIZE);
	cout << endl;
	displayStats();
	cout << endl;

	// Perform Selection Sort and display results
	resetStats();
	selectionSort(selectionArray, SIZE);
	cout << "SelectionSort" << endl;
	cout << "-------------" << endl;
	displayArray(selectionArray, SIZE);
	cout << endl;
	displayStats();
	cout << endl;

	system("pause");
	return 0;
}

// Array management functions
void fillArray(int arr[], int size)
{
	unsigned int seed = static_cast<int>(time(0));
	srand(seed);
	for (int index = 0; index < size; index++)
	{
		arr[index] = rand() % 1000;
	}
}

void copyArray(int source[], int destination[], int size)
{
	for (int index = 0; index < size; index++)
	{
		destination[index] = source[index];
	}
}

void displayArray(int arr[], int size)
{
	for (int index = 0; index < size; index++)
	{
		cout << setw(4) << arr[index];
		if (index % 10 == 9)
			cout << endl;
	}
}

// Bubble Sort algorithm
void bubbleSort(int arr[], int size)
{
	int maxElement;
	int index;

	for (maxElement = size - 1; maxElement > 0; maxElement--)
	{
		for (index = 0; index < maxElement; index++)
		{
			if (greaterThan(arr[index], arr[index +1]))
			{
				swapItems(arr, index, index + 1);
			}
		}
	}
	// implement bubbleSort using the greaterThan
	// and swapItems functions
}

// Selection Sort algorithm
void selectionSort(int arr[], int size)
{
	
	int maxElement;
	int index;

	for (maxElement = size - 1; maxElement > 0; maxElement--)
	{
		for (index = 0; index < maxElement; index++)
		{
			if (lessThan(arr[index], arr[index + 1]))
			{
				swapItems(arr, index, index + 1);
			}
		}
	}

	// implement selectionSort using the lessThan
	// and swapItems functions
}

// Basic operations with counters
void swapItems(int arr[], int index1, int index2)
{
	numSwaps++;
	int temp = arr[index1];
	arr[index1] = arr[index2];
	arr[index2] = temp;
}

bool lessThan(int num1, int num2)
{
	numComparisons++;
	return num1 < num2;
}

bool greaterThan(int num1, int num2)
{
	numComparisons++;
	return num1 > num2;
}

// Functions for managing statistics
void resetStats()
{
	numSwaps = 0;
	numComparisons = 0;
}

void displayStats()
{
	cout << "Swaps: " << numSwaps << " Comparisons: " << numComparisons << endl;
}
Topic archived. No new replies allowed.