2016-04-11 1 views
1

編集: [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]を言うときので(ここからソートされている上のすべてのもの)

答えて

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); 

は、このコードブロックは、最初はi=sizeと配列するので、(あなたがheapsort()関数に配列の実際のサイズを渡していると仮定して)あなたに問題を与えますインデックスはから始まり、最大インデックスはサイズ-1となります。array[i]はごみデータを提供します。したがって、heapsort()機能ではi=size-1buildHeap()機能ではheapify(array, i, size-1)を使用してください。

+0

ありがとう、私はそれを見ていないとは思わない。それは巨大な数字を修正しましたが、私はまだそれが来てどこに見つけることができないソート部分の前にまだある13上記のようなものがあります。 – Jab2ak

+0

@ Jab2akソートアルゴリズムのロジックから来ている可能性があります(最初の配列要素**配列[0] **はソート内に含まれていません)。注意深く再度確認してください。 –

関連する問題