/******************************************************************************************** ezwQuick.cpp Jim Millard for CO311 EZwindows sort visualization for QuickSort ********************************************************************************************/ #include "ezwQuick.h" #include "ezwSwap.h" #include "ezwUtils.h" int Partition(SimpleWindow& W, RaySegment* ptrR[], int A[], const int left, const int right, const short load); void QuickSort(SimpleWindow& W, RaySegment* ptrR[], int A[], const int left, const int right, const short load) { if (left < right) { if (A[left] > A[right]) { Swap(A[right], A[left]); Swap(W, *ptrR[right], *ptrR[left], load); } int pivot = Partition(W, ptrR, A, left, right, load); QuickSort(W, ptrR, A, left, pivot-1, load); QuickSort(W, ptrR, A, pivot+1, right, load); Highlight(*ptrR[left],Green); Highlight(*ptrR[right],Green); } } int Partition(SimpleWindow& W, RaySegment* ptrR[], int A[], const int left, const int right, const short load) { int pivot = A[left]; int i = left, j = right+1; do { do ++i; while (A[i] < pivot); do --j; while (A[j] > pivot); if (i < j) { Swap(A[i], A[j]); Swap(W, *ptrR[i], *ptrR[j], load); } } while (i < j); if (j != left) { Swap(A[j], A[left]); Swap(W, *ptrR[j], *ptrR[left], load); } Highlight(*ptrR[j],Green); return j; }