|
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;
- }
复制代码

|
|