LINUX.ORG.RU

Сообщения Junior_C

 

Счётчик перестановок и сравнений

Реализовал 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
Заранее спасибо.

 , ,

Junior_C
()

RSS подписка на новые темы