In: Computer Science
Write a C++ code for these 2 questions
1. Create an integer variable named ‘arraySize’ and initialize the value to 1000.
2.. Open an output file named ‘GroupAssignment2Results.csv’. The first line of this file should be the column headings: ‘Array Size’, ‘Bubble Sort Time’, ‘Selection Sort Time’, ’Insertion Sort Time’, ‘Quick Sort Time’, ‘Merge Sort Time’.
///////////////////////
///// run in visual studio , other compiler can not identify chrono
// chrono use for time calculation
////////////////////////
// header file
#include<iostream>
#include<fstream>
#include<cstdlib>
#include<chrono>
using namespace std;
using namespace std::chrono;
// bubble sort algorithm
void bubbleSort(int *a, int size) {
   for (int i = 0; i<size - 1; i++) {
       for (int j = 0; j<size - i - 1;
j++) {
           if (a[j]>a[j
+ 1]) {
          
    //swap
          
    int temp = a[j];
          
    a[j] = a[j + 1];
          
    a[j + 1] = temp;
           }
       }
   }
}
// selection sort
void selectionSort(int *a, int size) {
   for (int i = 0; i<size - 1; i++) {
       int m_i = i;
       for (int j = i + 1; j<size; j++)
{
           if
(a[j]<a[m_i]) {
          
    m_i = j;
           }
       }
       //swap
       int temp = a[i];
       a[i] = a[m_i];
       a[m_i] = a[i];
   }
}
// insertion sort
void insertionSort(int *a, int size) {
   for (int i = 1; i<size; ++i) {
       int key = a[i];
       int j=i-1;
       for (; (j >= 0 && key
< a[j]); j--) {
           a[j + 1] =
a[j];
       }
      
       a[j + 1] = key;
   }
}
// make partition on array
int getPartition(int *a, int l, int h) {
   int pvt = a[h];
   int i = (l - 1);
   for (int j = l; j <= h - 1; j++) {
       if (a[j]<pvt) {
           i++;
           //swap
           int tmp =
a[i];
           a[i] =
a[j];
           a[j] = tmp;
       }
   }
   //swap
   int tmp = a[i + 1];
   a[i + 1] = a[h];
   a[h] = tmp;
   return(i + 1);
}
// quick sort
void quickSort(int *a, int l, int h) {
   if (l<h) {
       int p = getPartition(a, l, h);
       quickSort(a, l, p - 1);
       quickSort(a, p + 1, h);
   }
}
// merge array
void merge(int *a, int l, int m, int r) {
   int n1 = m - l + 1;
   int n2 = r - m;
   int *L = new int[n1];
   int *R = new int[n2];
   for (int i = 0; i<n1; i++) {
       L[i] = a[i + l];
   }
   for (int j = 0; j<n2; j++) {
       R[j] = a[m + j + 1];
   }
   int i = 0, j = 0, k = 1;
   while (i<n1 && j<n2) {
       if (L[i] <= R[j]) {
           a[k] =
L[i];
           i++;
       }
       else {
           a[k] =
R[j];
           j++;
       }
       k++;
   }
   while (i<n1) {
       a[k] = L[i];
       i++;
       k++;
   }
   while (j<n2) {
       a[k] = R[j];
       j++;
       k++;
   }
}
// merge sort
void mergeSort(int *a, int l, int r) {
   if (l<r) {
       int m = l + (r - l) / 2;
       mergeSort(a, l, m);
       mergeSort(a, m + 1, r);
       merge(a, l, m, r);
   }
}
int* randomData(int size) {
   int *ar = new int[size];
   for (int i = 0; i<size; i++) {
       ar[i] = rand();
   }
   return(ar);
}
void copyAry(int *a, int *b, int size) {
   for (int i = 0; i < size; i++) {
       a[i] = b[i];
   }
}
int main() {
int arraySize = 1000;
   int *arrLst = new int[arraySize];
   int *arLst = new int[arraySize];
   arrLst = randomData(arraySize);
   //copy array
   // because after sorting arry will be sorted
copyAry(arLst, arrLst, arraySize);
   auto start1 = high_resolution_clock::now();
   bubbleSort(arLst, arraySize);
   auto end1 = high_resolution_clock::now();
   auto duration1 =
duration_cast<microseconds>(end1 - start1);
   cout << duration1.count()<<endl;
   // copy array for new sort
   copyAry(arLst, arrLst, arraySize);
   auto start2 = high_resolution_clock::now();
   selectionSort(arLst, arraySize);
   auto end2 = high_resolution_clock::now();
   auto duration2 =
duration_cast<microseconds>(end2 - start2);
   cout << duration2.count() << endl;
   // copy array for new sort
   copyAry(arLst, arrLst, arraySize);
   auto start3 = high_resolution_clock::now();
   insertionSort(arLst, arraySize);
   auto end3 = high_resolution_clock::now();
   auto duration3 =
duration_cast<microseconds>(end3 - start3);
   cout << duration3.count() << endl;
   // copy array for new sort
   copyAry(arLst, arrLst, arraySize);
   auto start4 = high_resolution_clock::now();
   mergeSort(arLst, 0,arraySize-1);
   auto end4 = high_resolution_clock::now();
   auto duration4 =
duration_cast<microseconds>(end4 - start4);
   cout << duration4.count() << endl;
   // copy array for new sort
   copyAry(arLst, arrLst, arraySize);
   auto start5 = high_resolution_clock::now();
   quickSort(arLst, 0,arraySize-1);
   auto end5 = high_resolution_clock::now();
   auto duration5 =
duration_cast<microseconds>(end5 - start5);
   cout << duration5.count() << endl;
   ofstream out("GroupAssignment2Results.csv");
   out << "Array Size,Bubble Sort Time,Selection
Sort Time,Insertion Sort Time,Quick Sort Time,Merge Sort
Time\n";
   out << arraySize << "," <<
duration1.count() << "," << duration2.count() <<
"," << duration3.count() << "," <<
duration5.count() << "," << duration4.count();
   cout << "\nOutput in File.";
      
   out.close();
   cin.get();
   return(0);
}