| 
 | 
 
10鱼币 
编写函数实现冒泡法对实型数组从小到大排序。在主函数中首先输入一个整数N(1<N<=100),然后再输入N个实数存入数组中,调用你编写的函数排序后输出数组所有元素。 
 
输入样例: 
5 
2  3.5  1.0  0.618  1.142 
输出样例: 
0.6180 1.0000 1.1420 2.0000 3.5000 
这是我的代码 
- #include<stdio.h>
 
  
- int main()
 
 - {
 
 -     int N;
 
 -     scanf("%d",&N);
 
 -     double a[N];
 
 -     int n,i,j,k,t;
 
 -   
 
 -     for(i=0;i<N;i++)          //遍历输入
 
 -         scanf("%lf",&a[i]);
 
 -     
 
 -     for(k=1;k<=N-1;k++)              //外层循环表示共n-1趟排序 
 
 -         {
 
 -             for(i=0;i<N-k;i++)           //内层循环进行第k趟排序 
 
 -             if(a[i]>a[i+1])
 
 -             {         //比较交换 
 
 -                 t=a[i];
 
 -                 a[i]=a[i+1];
 
 -                 a[i+1]=t;
 
 -             }
 
 -         }
 
 -     for(i=0;i<N;i++)
 
 -     {          //遍历输出 
 
 -         if(i>0) 
 
 -         printf(" ");
 
 -         printf("%.4lf",a[i]);
 
 -     }
 
 -     //排序完成
 
 -     
 
 -     return 0;
 
 - }
 
  复制代码 
问题就是有两组数据,如下 
第一组测试输入: 
5 
2  3.5  1.0  0.618  1.142 
—— 预期输出 —— 
0.6180 1.0000 1.1420 2.0000 3.5000 
—— 实际输出 —— 
0.6180 1.0000 1.1420 2.0000 3.0000 
第二组测试输入: 
5 
1.23 2.13 .3.12 2.31 1.32 
—— 预期输出 —— 
0.1200 0.3000 1.2300 2.1300 2.3100 
 
—— 实际输出 —— 
0.0000 0.0000 1.0000 2.0000 2.3100 
请问怎么解决啊 
- #include <stdio.h>
 
  
- int main(){
 
 -     int n;
 
 -     int i,j;
 
 -     double temp;
 
  
-     printf("请输入一个整数:");
 
 -     scanf("%d",&n);
 
  
-     double array[n];
 
  
-     for (i = 0; i < n; i++){
 
 -         scanf("%lf",&array[i]);
 
 -     }
 
  
-     for (i = 0; i < n-1; i++){
 
 -         for (j = 0; j < n-i-1; j++){    //  此处 j < n-i-1
 
 -             if (array[j] > array[j+1]){
 
 -                 temp = array[j];
 
 -                 array[j] = array[j+1];
 
 -                 array[j+1] = temp;
 
 -             }
 
 -         }
 
 -     }
 
  
-     for (i = 0; i < n; i++){
 
 -         printf("%.4lf ",array[i]);
 
 -     }
 
  
-     return 0;
 
 - }
 
  复制代码 
  
 
 
 |   
 
 
 
 
 
 |