assignment_03.cpp
Problem Statement
assignment_03.cpp
WAP to sort a list of elements. Give user the option to perform sorting using Insertion sort, Bubble sort or Selection sort.
Source Code
cpp
#include <iostream>
#include <iomanip>
using namespace std;
typedef struct MenuItem {
int id;
const char* name;
} menu;
class SortList {
private:
int *arr;
int *tempArr;
int n;
void swapElements(int &a, int &b) {
int temp = a;
a = b;
b = temp;
}
void reset() {
for (int i = 0; i < n; i++) tempArr[i] = arr[i];
}
public:
SortList(int size) {
n = size;
arr = new int[n];
tempArr = new int[n];
}
void inputElements() {
cout << "\nEnter " << n << " elements: ";
for (int i = 0; i < n; i++) {
cin >> arr[i];
tempArr[i] = arr[i];
}
}
void insertionSort() {
reset();
for (int i = 1; i < n; i++) {
int key = tempArr[i];
int j = i - 1;
while (j >= 0 && tempArr[j] > key) {
tempArr[j + 1] = tempArr[j];
j--;
}
tempArr[j + 1] = key;
}
display();
}
void bubbleSort() {
reset();
for (int i = 0; i < n - 1; i++) {
bool swapped = false;
for (int j = 0; j < n - i - 1; j++) {
if (tempArr[j] > tempArr[j + 1]) {
swapElements(tempArr[j], tempArr[j + 1]);
swapped = true;
}
}
if (!swapped) break;
}
display();
}
void selectionSort() {
reset();
for (int i = 0; i < n - 1; i++) {
int minIdx = i;
for (int j = i + 1; j < n; j++) {
if (tempArr[j] < tempArr[minIdx]) minIdx = j;
}
if (minIdx != i) swapElements(tempArr[i], tempArr[minIdx]);
}
display();
}
void display() {
cout << "Sorted Array: ";
for (int i = 0; i < n; i++) cout << tempArr[i] << " ";
cout << endl;
}
void displayOriginal() {
cout << "\nOriginal List: ";
for (int i = 0; i < n; i++) cout << arr[i] << " ";
cout << endl;
}
void printMenu() {
menu items[] = {
{1, "Insertion Sort"}, {2, "Bubble Sort"},
{3, "Selection Sort"}, {0, "Display Original"},
{-1, "Exit"}
};
for (int i = 0; i < 5; i++) {
cout << items[i].id << ". " << items[i].name << "\n";
}
}
~SortList() {
delete[] arr;
delete[] tempArr;
}
};
int main() {
int n, choice;
cout << "Enter number of elements: ";
cin >> n;
if (n <= 0) {
cout << "Invalid size!\n";
return 0;
}
SortList sorter(n);
sorter.inputElements();
while (true) {
sorter.printMenu();
cout << "Enter your choice: ";
cin >> choice;
switch (choice) {
case 1: sorter.insertionSort(); break;
case 2: sorter.bubbleSort(); break;
case 3: sorter.selectionSort(); break;
case 0: sorter.displayOriginal(); break;
case -1:
cout << "\nExiting program.....\nMemory cleared!\nExit 0\n";
return 0;
default:
cout << "\nEntered wrong choice. Try again.\n";
}
}
}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
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