insert.cpp

URL: https://mirkwood.cs.edinboro.edu/~bennett/class/cmsc3140/fall2026/notes/intro/code/insert.cpp
 
#include <iostream>
#include <vector>
#include <random>
#include <algorithm>

using namespace std;

void InsertionSort(vector<int> & A);
void FillVector(vector<int> & A, size_t size);
void PrintVector(const vector<int> & A);
bool CheckVector(const vector<int> & A, const vector<int> & B);

const int SIZE{100'000};

int main() {

    vector<int> A;
    vector<int> B;

    FillVector(A, SIZE);
    B = A;
    //PrintVector(A);
    InsertionSort(A);
    //PrintVector(A);

    if(CheckVector(A,B)) {
       cout <<  "No errors found, the sort was good " << endl;
    }
    return 0;
}

bool CheckVector(const vector<int> & A, const vector<int> & B){
   bool ok{true};
   for(auto x: B) {
      if (find(A.begin(), A.end(), x) == A.end()) {
         cerr << x << " is in the original but not in the sorted list" << endl;
         ok = false;
      }
   }

   for(int i =1; i <A.size(); ++i) {
      if (A[i-1] > A[i]) {
         cerr << A[i-1] << " and " << A[i] << " are out of order " << endl;
         ok = false;
      }
   }

   return ok;
}

void InsertionSort(vector<int> & A) {
    for(int j = 1; j < A.size(); ++j) {
       int key = A[j];
       int i = j-1;
       while (i >= 0 and A[i] > key) {
           A[i+1] = A[i];
           --i;
       }
       A[i+1] = key;
    }
}

void PrintVector(const vector<int> & A){
   cout << A[0];
   for(int i =1; i < A.size(); ++i) {
      cout << ", " << A[i];
   }
   cout << endl;
}

void FillVector(vector<int> & A, size_t size){
   A.clear();

   random_device rd;
   mt19937 gen(rd());
   uniform_int_distribution<int> distrib(1,100'000);


   for(int i = 0; i < size; ++i) {
       A.push_back(distrib(gen));
   }
}