そのため、プログラムでクイックソートを使用しましたが、複雑さを O(n) に減らしたいと考えています。これを機能させるには、バケットソートを使用する必要があります。
私のプログラムが行うこと
私のプログラムは、整数のファイルとファイル内の整数の数を読み取り、ファイル内の数値の少なくとも 90% を超える、ファイル内の最小の数値を出力します。
クイックソートを使用して、これを機能させることができました。ただし、バケットソートで正しい出力が得られず、コードが正しいように見えるため、その理由がわかりません。
実行するとセグメンテーション違反が発生します
バケットのソートと結果の出力のための私のコード
void Bucket_Sort(int array[], int n)
{
int i, j;
int count[n];
for(i=0; i < n; i++)
{
count[i] = 0;
}
for(i=0; i < n; i++)
{
(count[array[i]])++;
}
for(i=0,j=0; i < n; i++)
{
for(; count[i]>0;(count[i])--)
{
array[j++] = i;
}
}
} Bucket_Sort(array, numberOfNumbers);
//Output the lowest number in the file which exceeds at least 90% of the numbers in the file.
for (count = floor(0.9 * numberOfNumbers); count < numberOfNumbers; count ++)
{
if (array[count] != array[count + 1])
{
output = array[count];
break;
}
}
printf("The outputs is : ");
printf("%d \n", output);
プログラムの出力はコンパイルされますが、実行時にセグメンテーション エラーが発生します。
BucketSort で間違っていることに関するアイデアはありますか?
ありがとうございました、
ダニエル