2016-03-20 17 views
0

Bir kitaptan bir sözde kod kullanarak (bir wikipedia dan gibi görünüyor) bir quicksort uygulamasını denedim, ancak çalışmasını sağlayamadım. Quicksort iyi çalışmıyor

Bu kaynak kodu:

int partitionare(int a[], int n, int p, int r) 
{ 
    int x, i, j, aux; 
    x = a[r]; // pivot 
    i = p - 1; 
    for (j = p; j < r; j++) 
    { 
     if (a[j] <= x) 
     { 
      i++; 
      aux = a[j]; 
      a[j] = a[i]; 
      a[i] = aux; 
     } 
    } 
    aux = a[i + 1]; 
    a[i + 1] = a[r]; 
    a[r] = aux; 
    return i + 1; 
} 
void quicksort(int a[], int n, int p, int r) 
{ 
    if (p < r) 
    { 
     int q = partitionare(a, n, p, r); 
     partitionare(a, n, p, q - 1); 
     partitionare(a, n, q + 1, r); 
    } 
} 
p ve r uzaklaştırmak ve dizinin

sonu Ve çağrı işlevi vardır

:

quicksort(a, n, 0, n-1); 

o saniye aldırma argüman Bu sadece test amaçlıdır.

+2

(işleve partition() değil) yinelemeli işlevi quicksort()Wikipedia article son çağrılara kendisine edilir doğrultusunda kapsamınızı? Test girişiniz için hangi sonuçları görüyorsunuz? –

+0

Ups, üzgünüm, bahsetmeyi unuttum. Giriş: 2, 8, 7, 1, 3, 5, 6, 4 Çıkış: 2, 1, 3, 4, 7, 5, 6, 8 – Altair2033

cevap

1

çalışmıyorsun ne demek istiyorsunuz

void quicksort(int a[], int n, int p, int r) 
{ 
    if (p < r) 
    { 
     int q = partitionare(a, n, p, r); 
     partitionare(a, n, p, q - 1);  /* recursive quicksort() here */ 
     partitionare(a, n, q + 1, r);  /* recursive quicksort() here */ 
    } 
} 
+0

Tanrım, işe yarıyor. Kitabımda da öyle oldu, ama etkili bir şekilde körüydüm. Ve bu problem bana 10 saat sürdü. Siz efendim, hayat kurtarıcıyız. Çok teşekkür ederim. :) – Altair2033

İlgili konular