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