Счётчик перестановок и сравнений
Реализовал 2 сортировки - пузырёк и двухпутевое слияние. На пузырьке счётчик перестановок и сравнений работает хорошо, а вот для двухпутевого слияние сделал только счётчик перестановок. А вот счётчик сравнеий пока не знаю куда ставить. Сам код :
int counS=0; //счётчик сравнений
int counP=0; //счётчик перестановок
//...
int Merge(int first, int last)
{
int middle, start, final, j;
int buff[N];
middle=(first+last)/2; //делим массив
start=first; //начало левой части
final=middle+1; //начало правой части
for(j=first; j<=last; j++) //от начала до конца
{
if ((start<=middle) && ((final>last) || (sts[start].oklad < sts[final].oklad)))
{
counP+=final-(middle+1);
buff[j]=sts[start].oklad;
start++;
}
else
{
buff[j]=sts[final].oklad;
final++;
}
}
//возвращение результата в список
for (j=first; j<=last; j++)
sts[j].oklad=buff[j];
return counP;
}
//рекурсивная процедура сортировки
void MergeSort(int first, int last)
{
if (first<last)
{
MergeSort(first, (first+last)/2); //сортируем левую часть
MergeSort((first+last)/2+1, last); //сортируем правую часть
Merge(first, last); //сливаем две части
}
}
Полный код сюда не лил, ибо простыня http://pastebin.com/3za7Z245
Заранее спасибо.