【问题标题】:Basic Quicksort algorithm in C using floating point numbersC中使用浮点数的基本快速排序算法
【发布时间】:2013-03-12 19:54:21
【问题描述】:

基本上,在 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);
    }
}

【问题讨论】:

  • 要求人们发现代码中的错误并不是特别有效。您应该使用调试器(或添加打印语句)来隔离问题,方法是跟踪程序的进度,并将其与您期望发生的情况进行比较。一旦两者发生分歧,那么您就发现了您的问题。 (然后如果有必要,你应该构造一个minimal test-case。)

标签: c algorithm sorting quicksort


【解决方案1】:
int pivot, j, temp, i;
^^^           ^^^^

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 措辞上的小改进:“舍入”只是“截断”(或向零舍入)。
    猜你喜欢
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    相关资源
    最近更新 更多