/********************************************************************************************
ezwInsrt.cpp
Jim Millard
for CO311
EZwindows sort visualization for Insertion Sort
********************************************************************************************/
#include "ezwInsrt.h"
#include "ezwUtils.h"
#include "ezwMove.h"
extern float baseline; //Bottom edge of all bars
extern float tempX; //horizontal position used when swapped to a "temp" location
void InsertionSort(SimpleWindow& W, RaySegment* ptrR[], int A[], const int size, const short load)
{
RaySegment temp(W, tempX,baseline/2, tempX,baseline/2, White, ptrR[0]->GetThickness());
for (int i = 1; i < size; i++)
{
if(A[i] < A[i-1])
{
//save off the out-of-place element to the temp area
int tooBig = A[i];
//highlight the one to move
Highlight(*ptrR[i],Blue,load);
//move it
Move(*ptrR[i], temp, load);
int hole;
for (hole = i; (hole > 0) && (A[hole-1] > tooBig); hole--)
{
Move(A[hole-1], A[hole]);
//highlight the one to move
Highlight(*ptrR[hole-1],Magenta,load);
//move it
Move(*ptrR[hole-1], *ptrR[hole], load);
//unhighlight it
Highlight(*ptrR[hole],Red);
}
A[hole] = tooBig;
Move(temp, *ptrR[hole], load);
//unhighlight it
Highlight(*ptrR[hole],Red);
}
}
return;
}