Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Оценка числа перестановок в HeapSort


Автор: Avaj 14.10.2008, 15:54
Подскажите, как наиболее точно оценить число перестановок в HeapSort?

Алгоритм тот же, что и в разделе http://forum.vingrad.ru/forum/topic-37776/anchor-entry285335/15.html:

Код

//=======================HeapSort================================================
template <class Type> void heap_sort(Type *a, unsigned long n, unsigned long& move, unsigned long& srav){
    Type x;
    unsigned long left = n/2, right = n-1;
    while(left>0){//Формирование пирамиды
        left--;
        sift(a,left,n-1,move,srav);
    }
    while(right>0){//формирование упорядоченного массива
        move++; //перестановка ( или тут надо +2? +3?)
        x = a[0];
        a[0] = a[right];
        a[right] = x;
        right--;
        sift(a,0,right,move,srav);
    }
}
//=======================Sift======================================================
template <class Type> void sift(Type *a, unsigned long left, unsigned long right, unsigned long& move, unsigned long& srav){
    unsigned long i = left, j = 2*left+1;
    Type x, elem = a[left];
    srav++;  // увеличивается счётчик сравнений
    if(j<right && a[j]<a[j+1]) j++;
    while(j<=right && elem<a[j]){
        move++;   // перестановка ( или тут надо +2? +3? )
        x = a[i];
        a[i] = a[j];
        a[j] = x;
        i = j;
        elem = a[i];
        j = 2*j+1;
        srav++; // увеличивается счётчик сравнений
        if(j<right && a[j]<a[j+1]) j++;
     }
}
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)