2
이 알고리즘에 의해 얼마나 많은 비교가 수행되었는지 계산하려면이 코드에 compare++
을 추가하고 싶습니다. 의 카운트가 Merge(...)
의 첫 번째 while 루프와 while 내부의 if
및 else
의 각 실행에서 증가해야합니까? 이것들은 compare
이 증가되어야하는 유일한 위치입니까? (나는 내가 속한 및 주석 생각이 증가를 추가했습니다. 스왑 기능을 무시하십시오)이 병합 정렬 알고리즘은 얼마나 많은 비교를합니까?
#include "MergeSort.h"
template<class ItemType>
void MergeClass<ItemType>::sort(ItemType values[], int first, int last)
// Post: The elements in values are sorted by key.
{
if (first < last)
{
int middle = (first + last)/2;
sort(values, first, middle);
sort(values, middle + 1, last);
Merge(values, first, middle, middle + 1, last);
}
}
template<class ItemType>
void MergeClass<ItemType>::Merge(ItemType values[], int leftFirst, int leftLast,
int rightFirst, int rightLast)
// Post: values[leftFirst]..values[leftLast] and
// values[rightFirst]..values[rightLast] have been merged.
// values[leftFirst]..values[rightLast] are now sorted.
{
ItemType tempArray[5];
int index = leftFirst;
int saveFirst = leftFirst;
while ((leftFirst <= leftLast) && (rightFirst <= rightLast))
{
if (values[leftFirst] < values[rightFirst])
{
tempArray[index] = values[leftFirst];
leftFirst++;
//compare++;
}
else
{
tempArray[index] = values[rightFirst];
rightFirst++;
//compare++;
}
index++;
//compare++;
}
while (leftFirst <= leftLast)
// Copy remaining items from left half.
{
tempArray[index] = values[leftFirst];
leftFirst++;
index++;
}
while (rightFirst <= rightLast)
// Copy remaining items from right half.
{
tempArray[index] = values[rightFirst];
rightFirst++;
index++;
}
for (index = saveFirst; index <= rightLast; index++)
values[index] = tempArray[index];
}
template<class ItemType>
inline void MergeClass<ItemType>::Swap(ItemType& item1, ItemType& item2)
// Post: Contents of item1 and item2 have been swapped.
{
ItemType tempItem;
tempItem = item1;
item1 = item2;
item2 = tempItem;
}
template<class ItemType>
MergeClass<ItemType>::MergeClass()
{
compare = 0;
swap = 0;
}
template<class ItemType>
void MergeClass<ItemType>::sortPreformance()
{
cout << "Comparisons made: " << compare <<endl;
cout << "Swaps made: "<< swap <<endl;
}
그것은 당신에게 더 명확 될 것이다 : 그것은 (단지
std::sort
에 의해 사용되는 비교와 스왑의 수를 계산) 다음과 같은 것입니다. 그런 다음 증분을 함수에 넣을 수도 있습니다. –'MergeClass'를 그대로 사용하고 비교 연산자에서 카운터를 증가시키는 ItemType을 사용하는 것이 어떻습니까? – user786653
@ user786653 당신이 말하는 것을 보여 줄 수 있습니까? – Zzz