Adding final assignment updates
This commit is contained in:
82
TheAlgorithmicOrganizer/Sort.cpp
Normal file
82
TheAlgorithmicOrganizer/Sort.cpp
Normal file
@@ -0,0 +1,82 @@
|
||||
#include "Sort.h"
|
||||
|
||||
int CompareByLastName(const TBankAccount* a, const TBankAccount* b)
|
||||
{
|
||||
if (a == b)
|
||||
return 0;
|
||||
if (!a)
|
||||
return -1;
|
||||
if (!b)
|
||||
return 1;
|
||||
|
||||
if (a->ownerLastName < b->ownerLastName)
|
||||
return -1;
|
||||
if (a->ownerLastName > b->ownerLastName)
|
||||
return 1;
|
||||
if (a->ownerFirstName < b->ownerFirstName)
|
||||
return -1;
|
||||
if (a->ownerFirstName > b->ownerFirstName)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int CompareByBalanceAsc(const TBankAccount* a, const TBankAccount* b)
|
||||
{
|
||||
if (a == b)
|
||||
return 0;
|
||||
if (!a)
|
||||
return -1;
|
||||
if (!b)
|
||||
return 1;
|
||||
|
||||
if (a->getBalance() < b->getBalance())
|
||||
return -1;
|
||||
if (a->getBalance() > b->getBalance())
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int CmpWrap(FCompareAccounts cmp, TBankAccount* a, TBankAccount* b, OperationSummary& s)
|
||||
{
|
||||
++s.comparisons;
|
||||
return cmp(a, b);
|
||||
}
|
||||
|
||||
static void SwapPointers(TBankAccount* a, TBankAccount* b, OperationSummary* s)
|
||||
{
|
||||
std::swap(a, b);
|
||||
++s->swaps;
|
||||
}
|
||||
|
||||
Sort::Sort(TBankAccount **sourceArray, int count, TLinkedList *sourceList)
|
||||
: m_array(sourceArray), m_count(count), m_list(sourceList){}
|
||||
|
||||
TBankAccount **Sort::CloneArray() const
|
||||
{
|
||||
if (!m_array || m_count == 0)
|
||||
return nullptr;
|
||||
auto** copy = new TBankAccount*[m_count];
|
||||
for (int i = 0; i < m_count; i++)
|
||||
copy[i] = m_array[i];
|
||||
return copy;
|
||||
}
|
||||
|
||||
static TLinkedList* g_cloneTarget = nullptr;
|
||||
|
||||
static void AppendToClone(TBankAccount* acc, int)
|
||||
{
|
||||
if (g_cloneTarget)
|
||||
g_cloneTarget->Append(acc);
|
||||
}
|
||||
|
||||
TLinkedList *Sort::CloneList() const
|
||||
{
|
||||
if (!m_list)
|
||||
return nullptr;
|
||||
auto* copy = new TLinkedList(false);
|
||||
m_list->forEach(AppendToClone);
|
||||
g_cloneTarget = copy;
|
||||
return copy;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user