0
私はクイックソートで行われた比較回数を計算するコードを書いています。クイックソートの計数比較:間違った回答
アルゴリズムは、クイックソートが長さmの配列に対して実行されるたびに、比較回数をm-1だけ増加させます(ピボットはそれ自身以外のものと比較されるため)。
ピボットの選択は、常に配列の最初の要素です。
10000エントリの配列で使用しようとすると、間違った答えが出てきます。
正解はとします。データセットへ
リンクを以下に示す: https://drive.google.com/file/d/0B0D_kFnzj_RrYm9NT0lrM3JfN2c/view?usp=sharing
総比較をxに格納されています。
#include<stdio.h>
long long x=0;
int size=10000;
int A[10000];
int B[10000];
void quicksort(int A[],int begin,int end)
{
if(begin<end){
int i=begin;
int j=end;
int k;
int pivot=begin;
for(k=begin+1;k<=end;k++)
{
if(A[k]>A[pivot])
{
x++;
B[j]=A[k];
j--;
}
else
{
x++;
B[i]=A[k];
i++;
}
}
B[i]=A[pivot];
for(k=begin;k<=end;k++)
{
A[k]=B[k];
}
quicksort(A,begin,i-1);
quicksort(A,i+1,end);
}
else
{
if((end-begin)==1) x++;
}
}
int main()
{
FILE *myFile;
myFile = fopen("QuickSort.txt", "r");
int i;
for (i = 0; i < 10000; i++)
{
fscanf(myFile, "%d", &A[i]);
}
quicksort(A,0,size-1);
for(i=0;i<size;i++)
{
printf("%d\n",A[i]);
}
printf("%lld",x);
}
間違った答えは-1を意味しますか?または42? –
btw:quicksortはインプレイスアルゴリズムなので、すべてをコピーする必要はありませんあなたの配列上で実行させることができます – Thomas
私は前に間違ったコードをアップロードしました。私はとても大変申し訳ありません。 –