• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

quicksort - liczniki

0 głosów
436 wizyt
pytanie zadane 7 czerwca 2018 w C i C++ przez kikosiak Obywatel (1,010 p.)

Cześć mam pytanie. Czy liczniki które mam w kodzie dobrze liczą ilość zamian i porównań? 

int counter,changes;

void quicksortMW(int_array_type array, int low, int high)
{
    if(low<high) {
        int partition_index = partitionMW(array,low,high);
        quicksortMW(array, low, partition_index);
        quicksortMW(array, partition_index+1, high);
    }
}

int partitionMW(int_array_type array, int low, int high)
{
    int pivot = array[low];
    int i = low-1, j = high+1;

    while(i<j) {
        while(array[--j]>pivot)
           ;
        while(array[++i]<pivot)
            ;counter++;
        if(i<j){
            swap(&array[i],&array[j]);
            changes++;

        }
    }
    return j;
}

 

1 odpowiedź

0 głosów
odpowiedź 7 czerwca 2018 przez RafalS VIP (122,780 p.)
if(low<high)

To też jest porównanie.

while(array[--j]>pivot)
           ;
while(array[++i]<pivot)
            ;

To są porównania (wielokrotne).

        while(array[++i]<pivot)
            ;counter++;

mam nadzieje, że wiesz ze ten counter nie jest inkrementowany przez pętlę pod którą się znalazł tylko przez pętlę  zewnętrzną, czyli liczy tylko jej porównania.

if(i<j){

To też jest porównanie.

komentarz 7 czerwca 2018 przez kikosiak Obywatel (1,010 p.)

Czyli  ma być tak?

void quicksortMW(int_array_type array, int low, int high)
{
    if(low<high) {
            counter++;
        int partition_index = partitionMW(array,low,high);
        quicksortMW(array, low, partition_index);
        quicksortMW(array, partition_index+1, high);
    }
}

int partitionMW(int_array_type array, int low, int high)
{
    int pivot = array[low];
    int i = low-1, j = high+1;

    while(i<j) {
        while(array[--j]>pivot)
           counter++;
        while(array[++i]<pivot)
            counter++; counter++;
        if(i<j){
            swap(&array[i],&array[j]);
            changes++;

        }
    }
    return j;
}

 

Podobne pytania

0 głosów
4 odpowiedzi 782 wizyt
pytanie zadane 2 listopada 2018 w C i C++ przez Maciek6997 Nowicjusz (160 p.)
0 głosów
0 odpowiedzi 1,745 wizyt
pytanie zadane 6 czerwca 2018 w C i C++ przez qlucha Obywatel (1,790 p.)
0 głosów
2 odpowiedzi 1,152 wizyt

93,741 zapytań

142,677 odpowiedzi

323,294 komentarzy

63,323 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...