2013-12-15 117 views
0
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編譯它不會有幫助。快速排序代碼在C中,64位的Windows機器

但在我的codeforces自定義測試中運行良好使用GNU C++ 4.7即打印亂碼7次後結束。但使用GNU C 4

如何解決這個時候給

Runtime error: exit code is 11

回答

2

您正在嘗試使用%d說明符打印float,該說明符用於整數。嘗試

printf("%f\n", a[i]); 

改爲。

4

有兩個問題與您的代碼:

  1. 正如@Chowlett提到,打印浮動你需要使用%f,不%d,以及覆蓋gibrrish部分...
  2. 由於陣列的大小是7,最後一個索引是6,而不是7,並且可能覆蓋了碰撞部分。