0

私はクイックソートアルゴリズムの次の実装を書きました.次のコードスニペットが機能しない理由を推測できません(コンパイルはうまくいきますが、実行時に実行できません.exeが機能しなくなりました).誰かが助けてくれれば幸いです.この点で私:

main( )
{
    int a[ ]={9,2,3,1,6,5,6,3,2,9,8,1,4,5,5,6,5,99};
    quicksort(a,0,17);
    print(a,18);    

}

void print(int a[ ],int n)
{
int i;
for (i=0;i<n;i++)
        printf("%d\n",a[i]);
} 

   void swap(int a[ ],int left,int right)
      {
        int t;
        t=a[left];
            a[left]=a[right];
            a[right]=t;
     }

   void quicksort(int a[ ],int left,int right)
   {
    int i,last;
        if ( left >= right)
            return;
    swap(a,left,(last+right)/2);
        last=left;
        for (i=last+1;i<=right;i++)
            if (a[i] < a[left])
                swap(a,++last,i);
        swap(a,left,last);
        quicksort(a,left,last-1);
        quicksort(a,last+1,right);

}

4

3 に答える 3

0

このスニペットには 2 つの問題があります。1 つは、すべての変数を値で初期化する必要があるという一般的なコーディング ルールです。そうしないと、変数がガベージ値を取り、予期しない出力を生成する可能性があります。2 番目に、アルゴリズムに問題があります。スワップ関数を呼び出す関数クイックソートでは、渡される正しいパラメーターは「swap(a,left,( left +right)/2);」です。

PS - プロジェクトに取り組んでいる場合も関数プロトタイプを提供してください。それ以外の場合はこれを無視してください。

于 2013-06-19T06:01:47.290 に答える