在c中快速排序代码,在64位Windows机器上无法解释的行为

Quick sort code in c , unexplained behavior on 64bit windows machine

本文关键字:无法解释 机器 64位 快速排序 代码 Windows      更新时间:2023-10-16
void quicksort(float x[],int first,int last)
{
    float temp;int  j, pivot, 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);
    }
}
main()
{
    float a[]={4.0,6.0,8.5,9.1,6,11.1,1.1};
    //int len=6;
    int len=7;
    quicksort(a,0,len);
    int i=0;
    for(i=0;i<len;i++)
        printf("%dn",a[i]);
}

代码块的运行时,打印乱码,循环在 7 次迭代后不会结束,执行会继续,直到最后出现分段错误。 在命令行上使用 gcc 编译它无济于事。

但是在我的codeforce自定义测试中使用GNU C++ 4.7上运行良好,即它在打印乱码7次后结束。 但给

运行时错误:退出代码为 11

使用 GNU C 4 时

如何解决这个问题?

您的代码有两个问题:

  1. 正如@Chowlett所提到的,要打印浮点数,您需要使用 %f ,而不是 %d ,这涵盖了 gibrish 部分......
  2. 由于数组的大小是 7,最后一个索引是 6,而不是 7,这可能涵盖了崩溃部分。

您正在尝试使用%d说明符打印float,该说明符适用于整数。尝试

printf("%fn", a[i]);

相反。