首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C中的快速排序代码,在64位windows机器上无法解释的行为

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

Stack Overflow用户
提问于 2013-12-15 07:40:42
回答 2查看 215关注 0票数 0
代码语言:javascript
运行
复制
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("%d\n",a[i]);
}

在代码块上运行期间,打印胡言乱语,循环在7次迭代后不会结束执行,直到在结束时出现分段错误为止。在命令行上用gcc编译它是没有帮助的。

但是在我的代码强制使用GNU C++ 4.7的自定义测试上运行得很好,也就是说,它在输出胡言乱语7次之后就结束了。但给了

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

使用GNU C4时

如何解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-15 07:51:23

您正在尝试使用用于整数的float说明符打印%d。试一试

代码语言:javascript
运行
复制
printf("%f\n", a[i]);

而不是。

票数 2
EN

Stack Overflow用户

发布于 2013-12-15 07:53:29

您的代码有两个问题:

  1. 正如@Chowlett所提到的,要打印浮点,您需要使用%f,而不是%d,这涵盖了gibrrish部分.
  2. 由于数组的大小为7,最后一个索引是6,而不是7,这可能包括崩溃部分。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20592341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档