2011-12-14 10 views
1

クイックソートに少し問題があります。私はそれを&に渡そうとしていますが、間違ったことを続けています。どんな洞察力も大変高く評価されます。クイックソートをCソート構造体で実装しようとしています

コードは、私がオンラインで見つけた汎用クイックソートを実装しています。本質的には、私はそれをコピーしようとしていますが、構造体の距離で並べ替えます。したがって、距離が小さい場合 - 私は2つのファイルを移動し、適切に並べ替えたいです。

ありがとうございます!これに

void swap(PointClassify &i, PointClassify &j) 

:この

typedef struct Tag 
{ 
    char classify; 
    float pointX; 
    float pointY; 
    float distance; 
}PointClassify; 

void swap(PointClassify &i, PointClassify &j) 
{ 
    PointClassify temp; 
    temp = i; 
    i = j; 
    j = temp; 
} 
void quickSort(PointClassify item[], int start, int end) 
{ 
    float pivot; 
    int i = start, j = end; 

    pivot = item[(start+end)/2].distance; 

    while(i <= j) 
    { 
      while(item[i].distance < pivot) 
      { 
        i = i+1; 
      } 
      while(item[j].distance > pivot) 
      { 
        j = j-1; 
      } 
      if(i <= j) 
      { 
        swap(item[i],item[j]); 
        i = i+1; 
        j = j-1; 
      } 
    } 
fprintf(stderr, "This is the number %d \n", item[i].distance); 
    if(start < j) 
    { 
      quickSort(item, start, j); 
    } 
    if(i < end) 
    { 
      quickSort(item, i, end); 
    } 
} 
+2

おそらくあなたはあなた自身の啓発のためにこれをしていますが、あなたは標準ライブラリで 'qsort'に気付かなかったでしょうか? – dmckee

+1

将来、問題があると言っているのではなく、あなたのコードでどのような問題が起きているのかを説明すると役に立ちます。 – Bashwork

+0

スワップを渡そうとしていますが、動作しません。それをもっとわかりやすくしてくれてすみません。 –

答えて

2

変更Cで

void swap(PointClassify *i, PointClassify *j) 

は、宣言の中で、*変数はその型の何かへのポインタであることを示しています。 &演算子を使用して、varaibleのアドレスを取得します。たとえば、関数を呼び出すときに使用します。

swap(&item[i], &item[j]); 
+0

あなたが言ったようにして結果を得ました。タイプ 'PointClassify'からタイプ 'struct PointClassify *'に割り当てるときに互換性のないタイプ –

+0

一時変数のデータ型を関数パラメータのデータ型に合わせて変更しましたか? –

+0

詳しいことはありますか?本当に私には意味がありません。 –

1

コンパイルされませんか?

pass-by-referenceはC++の機能です。ポインタを使う:

swap(PointClassify *i, PointClassify *j) 
+0

私は、スワップ(PointClassify * i、PointClassify * j)に適応するように変更しましたが、まだエラーが発生します。 –

+0

もちろん、コードの他の部分を修正してポインタを使用する必要があります... –

関連する問題