2016-04-11 16 views
1

Düzenleme: Şimdi bu ilk iki sayıdan sadece bu sefer çalışıyor [1] dizinindeki sayı [0] dizinindeki biriyle değiştirilmelidir. Ancak, her ne zaman ben programım çöküyor ... Orijinal: Benim projelerimden biri için farklı sıralama algoritmaları zaman harcamak zorunda kaldım ve şu ana kadar hepsini işe almak ama yığın sıraladım. Her şey iyi çalışıyor gibi görünüyor ama sıralanmış diziyi çıkardığımda, ilk iki değer birbirine karışıyor ve neden olduğunu anlayamıyorum. 13, -33.686.019, 0, 0:yığın sıralaması, her şey ama ilk iki değerleri sıralanır

void heapify(int* array, int index, int size) 
{ 
    int j, temp; 
    temp = array[index]; 
    j = (2 * index); 

    while (j <= size) 
    { 
    if (j < size && array[j + 1] > array[j]) 
      j = (j + 1); 

    if (temp > array[j]) 
      break; 
    else if (temp <= array[j]) 
    { 
      array[(j/2)] = array[j]; 
      j = (2 * j); 
    } 
    } 

array[(j/2)] = temp; 
return; 
} 

void buildHeap(int* array, int size) 
{ 
    int i; 

    for (i = (size/2); i >= 1; i--) 
    { 
     heapify(array, i, size); 
    } 
} 

double heapsort(int* array, int size) 
{ 
    int i; 
    clock_t end, begin; 

    begin = clock(); //Start the timer// 
    buildHeap(array, size); 

    for (i = size; i >= 2; i--) 
    { 
     swap(array[i], array[1]); 
     heapify(array, 1, (i - 1)); 
    } 
    end = clock(); //Stop the timer// 

    return diffClocks(end, begin); //Return the amount of time it took to sort// 
} 

Ne yazık ki, bir dizi rastgele bize verildi ve ran her değiştirir, ancak çıkış bir örnek olduğu) (ana içinde oluşturulur , 1, 2, 3, . . . (Sıralanır üzerine buradan herşey)

cevap

0
//in heapsort() function 
for (i = size; i >= 2; i--) 
{ 
     swap(array[i], array[1]); 
     heapify(array, 1, (i - 1)); 
} 

//in buildHeap() function 
heapify(array, i, size); 

Bu kod bloğu size bir sorun nedeniyle (eğer heapsort() işleve dizinin gerçek boyutunu geçiyoruz varsayarak) verecek başlangıçta array[i], i=size ve dizinin beri derken indeksleme 'dan başlar, maksimum dizin size-1 ve array[i] size bir çöp verisi verir. Yani heapsort() işlevinde i=size-1 işlevini ve işlevini buildHeap() işlevinde kullanın.

+0

Teşekkürler, bunu görmediğime inanamıyorum. Bu muazzam sayıyı düzeltti ama hala yukarıda 13 gibi bir tane var, hala geldiği yeri bulamadığım kısımda. – Jab2ak

+0

@ Jab2ak Muhtemelen sıralama algoritmanızın mantığından geliyor (ilk dizi elemanı değil, ** dizi [0] **, sıralamada). Dikkatlice tekrar kontrol etmelisiniz. –