在C中使用浮点数的基本快速排序算法



基本上,在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);
    }
}
int pivot, j, temp, i;
^^^           ^^^^

temp应该是数组元素的类型,否则在交换时元素会被转换。

您正在使用int类型的临时变量(temp)交换浮点数。这会导致不必要的截断。

最新更新