Skip to content

SameerJain/Sorting-Algorithm-Analyzer

Repository files navigation

Sorting-Algorithm-Analyzer

Sameer Jain - Project leader

• Organized meetings and coordinated project to completion, Final grade: 100%.

• Assembled 61 C++ algorithm variations to sort data sets with a max size of 50,000.

• Compared CPU run time, read step counts, and analyzed trade-offs to find most efficient algorithms.

Presentation: https://docs.google.com/presentation/d/1dUqu7pfOn9Nu4loHAPI2E4TWEKYWjL3cYrdwhP6J-YY/edit?usp=sharing

CPU Data: https://docs.google.com/spreadsheets/d/1vWTPmyX2VwndZPcjbfmm-3cxkEMoKYH00fI44v1fscg/edit?usp=sharing

Algo Steps Count: https://docs.google.com/spreadsheets/d/1BKbo1bFIx7Ax6Nh3gNtErdYFnpNI6KYakWHr2gB0T3Y/edit#gid=0

To Compile: step 1: Copy code for desired part (1 or 2) and paste into main step 2: g++ main.cpp -o main step 3: ./main

Input this into int main():

  // TASK 1 OUTPUT
  cout << "=========TASK 1==============\n";

  for (int i = 0; i <= 7; i++)
  {
    // Initialization and printArray
    Size = dataSetSizes[i];
    cout << "Current Size:" << Size << endl;
    int *tempArr = newPermutArray(Size);
    cout << "Original Array:\n";
    printArray(tempArr, Size);
    // BUBBLE SORT
    cout << "=======BUBBLE SORT:============\n";
    cout << "Bubble Sort A = ";
    func_eval(tempArr, Size, bubbleSortA);
    bubbleSortAS(tempArr, Size);
    cout << "Bubble Sort B = ";
    func_eval(tempArr, Size, bubbleSortB);
    bubbleSortBS(tempArr, Size);
    // INSERTION SORT
    cout << "=======INSERTION SORT:============\n";
    cout << "Insertion Sort A = ";
    func_eval(tempArr, Size, insertionSortA);
    insertionSortAS(tempArr, Size);
    cout << "Insertion Sort B = ";
    func_eval(tempArr, Size, insertionSortB);
    insertionSortBS(tempArr, Size);
    // SELECTION SORT
    cout << "=======SELECTION SORT:============\n";
    cout << "Selection Sort A = ";
    func_eval(tempArr, Size, selectionSortA);
    selectionSortAS(tempArr, Size);
    cout << "Selection Sort B = ";
    func_eval(tempArr, Size, selectionSortB);
    selectionSortBS(tempArr, Size);
    // HEAP SORT
    cout << "=======HEAP SORT:================\n";
    cout << "Heap Sort A = ";
    func_eval(tempArr, Size, heapSortA);
    heapSortAS(tempArr, Size);
    cout << "Heap Sort B = ";
    func_eval(tempArr, Size, heapSortB);
    heapSortBS(tempArr, Size);
    // MERGESORT
    cout << "=======MERGESORT:================\n";
    cout << "Merge Sort A = ";
    func_eval2(tempArr, 0, Size - 1, mergeSortA);
    func_evalStepsMQ(tempArr, 0, Size - 1, mergeSortAS);
    cout << "Merge Sort B = ";
    func_eval2(tempArr, 0, Size - 1, mergeSortB);
    func_evalStepsMQ(tempArr, 0, Size - 1, mergeSortBS);
    // Merge Insertion
    cout << "Merge-Insertion Sort A = ";
    func_evalMergeIns(tempArr, 0, Size - 1, Size * 0.01, mergeInsertionSortA);
    func_evalMergeInsSteps(tempArr, 0, Size - 1, Size * 0.01, mergeInsertionSortAS);
    cout << "Merge-Insertion Sort B = ";
    func_evalMergeIns(tempArr, 0, Size - 1, Size * 0.01, mergeInsertionSortB);
    func_evalMergeInsSteps(tempArr, 0, Size - 1, Size * 0.01, mergeInsertionSortBS);
    // QUICKSORT
    cout << "=======QUICKSORT:================\n";
    // Hoarse
    cout << "Quick Sort A (HOARSE)= ";
    func_eval2(tempArr, 0, Size - 1, quickSortHA);
    func_evalStepsMQ(tempArr, 0, Size - 1, quickSortHAS);
    cout << "Quick Sort B (HOARSE)= ";
    func_eval2(tempArr, 0, Size - 1, quickSortHB);
    func_evalStepsMQ(tempArr, 0, Size - 1, quickSortHBS);
    //  Lamuto
    cout << "Quick Sort A (LAMUTO)= ";
    func_eval2(tempArr, 0, Size - 1, QuicksortLA);
    func_evalStepsMQ(tempArr, 0, Size - 1, QuicksortLAS);
    cout << "Quick Sort B (LAMUTO)= ";
    func_eval2(tempArr, 0, Size - 1, QuicksortLB);
    func_evalStepsMQ(tempArr, 0, Size - 1, QuicksortLBS);

    delete[] tempArr;
    BaseArr.clear();
  } ```

// PART 2 

  cout << "=========TASK 2==============\n";
  for (int i = 0; i < 8; i++)
  {
    Size = dataSetSizes[i];

    cout << "\n\n\nCurrent Size: " << Size << endl
         << endl;

    for (int j = 1; j <= 50; j++)
    {
      int *tempArr = newRandArray(Size);
      // BUBBLE SORT
      cout << "=======BUBBLE SORT:============\n";
      cout << "Time\n";
      func_eval(tempArr, Size, bubbleSortA);
      cout << "Steps\n";
      bubbleSortAS(tempArr, Size);
      // INSERTION SORT
      cout << "=======INSERTION SORT:============\n";
      cout << "Time\n";
      func_eval(tempArr, Size, insertionSortA);
      cout << "Steps\n";
      insertionSortAS(tempArr, Size);

      // SELECTION SORT
      cout << "=======SELECTION SORT:============\n";
      cout << "Time\n";
      func_eval(tempArr, Size, selectionSortA);
      cout << "Steps\n";
      selectionSortAS(tempArr, Size);

      // HEAP SORT
      cout << "=======HEAP SORT:============\n";
      cout << "Time\n";
      func_eval(tempArr, Size, heapSortA);
      cout << "Steps\n";
      heapSortAS(tempArr, Size);

      // MERGE SORT
      cout << "=======MERGE SORT:============\n";
      cout << "Time\n";
      func_eval2(tempArr, 0, Size - 1, mergeSortA);
      cout << "Steps\n";
      func_evalStepsMQ(tempArr, 0, Size - 1, mergeSortAS);

      // MERGE-Insertion SORT
      cout << "=======MERGE INSERTION SORT:============\n";
      cout << "Time\n";
      func_evalMergeIns(tempArr, 0, Size - 1, Size * 0.01, mergeInsertionSortA);
      cout << "Steps\n";
      func_evalMergeInsSteps(tempArr, 0, Size - 1, Size * 0.01, mergeInsertionSortAS);

      // QUICKSORT SORT HOARSE
      cout << "=======QUICK SORT HOARSE:============\n";
      cout << "Time\n";
      func_eval2(tempArr, 0, Size - 1, quickSortHA);
      cout << "Steps\n";
      func_evalStepsMQ(tempArr, 0, Size - 1, quickSortHAS);

      // QUICKSORT SORT LAMUTO
      cout << "=======QUICK SORT LAMUTO:============\n";
      cout << "Time\n";
      func_eval2(tempArr, 0, Size - 1, QuicksortLA);
      cout << "Steps\n";
      func_evalStepsMQ(tempArr, 0, Size - 1, QuicksortLAS);

      delete[] tempArr;
      BaseArr.clear();
    }
  }