編集: [0]インデックスのインデックス番号と[1]インデックスのインデックス番号を交換する必要があります。しかし、私が行ったときに私のプログラムがクラッシュする... オリジナル: 私のプロジェクトの一つは、私は異なるソートアルゴリズムを時間をかけていなければなりません。すべてがうまくいくようですが、ソートされた配列を出力すると、最初の2つの値が混乱してしまい、その理由を見つけることができません。 13、 -33686019、 0、 0:ヒープソートの場合、最初の2つの値を除くすべての値がソートされます
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//
}
残念ながら、配列はランダムに私たちに与えられ、それが走っていますたびに変わりますが、出力のサンプルがあるされている)(メインの内部で生成されます、 ,1, 2, 3, 。 。 。あなたがarray[i]
を言うときので(ここからソートされている上のすべてのもの)
ありがとう、私はそれを見ていないとは思わない。それは巨大な数字を修正しましたが、私はまだそれが来てどこに見つけることができないソート部分の前にまだある13上記のようなものがあります。 – Jab2ak
@ Jab2akソートアルゴリズムのロジックから来ている可能性があります(最初の配列要素**配列[0] **はソート内に含まれていません)。注意深く再度確認してください。 –