1

基本的に、C でクイックソート アルゴリズムを取得したので、整数ではなく浮動小数点数をソートする必要があります。これを行うためにコードを編集しました(そう思った)が、コードを実行すると、数字の後に小数点以下の桁数があるのはごくわずかで、残りは単に「.0」であるため、3.4、6.5、2.3未満の数字は次のようになります2.3、3.0、および 6.5。なぜこれが起こるのか、どうすればこれを克服できるのか誰か知っていますか? どうぞ、どんな助けでも大歓迎です。

#include <stdio.h>

void quicksort(float [10],float,float);

int main()
{
    float array[] = {3.4, 6.5, 2.3};
  int i,elementsize = 3 ,any;

  quicksort(array,0,elementsize-1);

  printf("\nSorted elements: ");
  for(i=0;i<elementsize;i++)
    printf("%.1f ",array[i]);

  printf("\nPress Any Key to Exit");
  scanf("%d", &any);
  return 0;
}


void quicksort(float x[10],float first,float last)
{   int pivot, j, temp, i;

if(first<last){
         pivot=first;
         i=first;
         j=last;


         while(i<j){
             while(x[i]<=x[pivot]&&i<last)
                 i++;
             while(x[j]>x[pivot])
                 j--;
             if(i<j){
                 temp=x[i];
                  x[i]=x[j];
                  x[j]=temp;
             }
         }

         temp=x[pivot];
         x[pivot]=x[j];
         x[j]=temp;
         quicksort(x,first,j-1);
         quicksort(x,j+1,last);
    }
}
4

2 に答える 2

3
int pivot, j, temp, i;
^^^           ^^^^

temp配列要素の型を持つ必要があります。そうでない場合、要素はスワップ時に変換されます。

于 2013-03-12T19:58:57.710 に答える
3

float を交換するために int 型の一時変数 (temp) を使用しています。これにより、望ましくない切り捨てが発生します。

于 2013-03-12T19:58:58.710 に答える