Assignment one:merge sort
Sanskriti Debnath:06301032023
#include <iostream>
#include <vector>
#include <chrono>
#include <algorithm>
using namespace std;
void merge(vector<int>& arr, int si, int mid, int ei, vector<int>& temp) {
int i = si, j = mid + 1, k = si;
while (i <= mid && j <= ei) {
if (arr[i] <= arr[j]) {
temp[k++] = arr[i++];
} else {
temp[k++] = arr[j++];
}
}
while (i <= mid) {
temp[k++] = arr[i++];
}
while (j <= ei) {
temp[k++] = arr[j++];
}
for (i = si; i <= ei; i++) {
arr[i] = temp[i];
}
}
void mergeSort(vector<int>& arr, int si, int ei, vector<int>& temp) {
if (si >= ei) return;
int mid = si + (ei - si) / 2;
mergeSort(arr, si, mid, temp);
mergeSort(arr, mid + 1, ei, temp);
merge(arr, si, mid, ei, temp);
}
int main() {
vector<int> sizes = {1000, 4000, 8000, 16000, 32000, 64000};
for (int size : sizes) {
vector<int> arr(size), temp(size);
for (int i = 0; i < size; i++) arr[i] = i;
auto startTime = chrono::high_resolution_clock::now();
mergeSort(arr, 0, arr.size() - 1, temp);
auto endTime = chrono::high_resolution_clock::now();
auto duration = chrono::duration_cast<chrono::milliseconds>(endTime - startTime).count();
cout << "Sorted Array - Size: " << size << ", Time: " << duration << " ms" << endl;
for (int i = 0; i < size; i++) arr[i] = size - i;
startTime = chrono::high_resolution_clock::now();
mergeSort(arr, 0, arr.size() - 1, temp);
endTime = chrono::high_resolution_clock::now();
duration = chrono::duration_cast<chrono::milliseconds>(endTime - startTime).count();
cout << "Reverse Sorted Array - Size: " << size << ", Time: " << duration << " ms" << endl;
for (int i = 0; i < size; i++) arr[i] = rand() % size;
startTime = chrono::high_resolution_clock::now();
mergeSort(arr, 0, arr.size() - 1, temp);
endTime = chrono::high_resolution_clock::now();
duration = chrono::duration_cast<chrono::milliseconds>(endTime - startTime).count();
cout << "Random Array - Size: " << size << ", Time: " << duration << " ms" << endl;
cout << "--------------------------------------------" << endl;
}
return ;
output:
Sorted Array - Size: 1000, Time: 0 ms
Reverse Sorted Array - Size: 1000, Time: 0 ms
Random Array - Size: 1000, Time: 0 ms
--------------------------------------------
Sorted Array - Size: 4000, Time: 1 ms
Reverse Sorted Array - Size: 4000, Time: 1 ms
Random Array - Size: 4000, Time: 2 ms
--------------------------------------------
Sorted Array - Size: 8000, Time: 3 ms
Reverse Sorted Array - Size: 8000, Time: 3 ms
Random Array - Size: 8000, Time: 5 ms
--------------------------------------------
Sorted Array - Size: 16000, Time: 2 ms
Reverse Sorted Array - Size: 16000, Time: 2 ms
Random Array - Size: 16000, Time: 4 ms
--------------------------------------------
Sorted Array - Size: 32000, Time: 8 ms
Reverse Sorted Array - Size: 32000, Time: 7 ms
Random Array - Size: 32000, Time: 12 ms
--------------------------------------------
Sorted Array - Size: 64000, Time: 14 ms
Reverse Sorted Array - Size: 64000, Time: 11 ms
Random Array - Size: 64000, Time: 18 ms
Graph table
Number of elements Sorted array Reverse sorted array Random array
1000 0 0 0
4000 0 0 1
8000 1 1 2
16000 3 3 5
32000 7 8 12
64000 14 11 18