鱼C论坛

 找回密码
 立即注册
查看: 1768|回复: 4

[已解决]有一个小问题

[复制链接]
发表于 2017-11-21 20:12:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
3.从键盘输入10个整数完成以下功能:将这10个数的前8个从大到小排序。
要求:排序过程由一个函数实现,函数原型为:
void sort(int nArray[], int n);
最后,在主程序中测试这个函数。


题目如上,代码如下,问题最下。


  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. void sort(int nArray[], int n)
  4. {
  5.         int temp,i,j;
  6.         for(i=0;i<n;i++){
  7.                 if(nArray[i]<nArray[i+1])
  8.                 {
  9.                         temp=nArray[i];
  10.                         nArray[i]=nArray[i+1];
  11.                         nArray[i+1]=temp;
  12.                 }
  13.                 else continue;
  14.                 for(i=n;i>=0;i--){
  15.                 if(nArray[i+1]>nArray[i])
  16.                 {
  17.                         temp=nArray[i];
  18.                         nArray[i]=nArray[i+1];
  19.                         nArray[i+1]=temp;
  20.                 }
  21.                 else continue;
  22.         }
  23.         }
  24. }
  25. int main()
  26. {
  27.         int arr[] = {2,46,52,5,7,9,631,6,32,54};
  28.         int n,i,len;
  29.         scanf("%d",&n);
  30.         sort(arr,n);
  31.         len = sizeof(arr)/sizeof(int);
  32.         for (i = 0; i<len; i++)
  33.         {
  34.                 printf("%d ",arr[i]);
  35.         }
  36.         return 0;
  37. }
复制代码



不知道为什么当我输入5的时候是前7个数排序了,输入8的时候是10个数全部排序了,只有我把主函数中scanf里的n改成n-2以后才正常,想知道是哪里的问题。
最佳答案
2017-11-21 20:46:57
首先冒泡排序不是你这么冒的。
第二,下标是从0开始,所以前8个 就意味着是 8-1
代码中 为 n-1

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. void sort(int nArray[], int n)
  4. {
  5.         int i, j, temp;
  6.       for (i = 0; i < n; i++) // 10个数,10 - 1轮冒泡,每一轮都将当前最大的数推到最后   
  7.       {   
  8.             for (j = 0; j < n - i; j++) // 9 - i,意思是每当经过一轮冒泡后,就减少一次比较   
  9.             if (nArray[j] > nArray[j+1])   
  10.             {   
  11.                   temp = nArray[j];   
  12.                   nArray[j] = nArray[j+1];   
  13.                   nArray[j+1] = temp;   
  14.             }   
  15.       }   
  16. }
  17. int main()
  18. {
  19.         int arr[] = {2,46,52,5,7,9,631,6,32,54};
  20.         int n,i,len;
  21.         scanf("%d",&n);
  22.         sort(arr,n-1);
  23.         len = sizeof(arr)/sizeof(int);
  24.         for (i = 0; i<len; i++)
  25.         {
  26.                 printf("%d ",arr[i]);
  27.         }
  28.         return 0;
  29. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-21 20:46:57 | 显示全部楼层    本楼为最佳答案   
首先冒泡排序不是你这么冒的。
第二,下标是从0开始,所以前8个 就意味着是 8-1
代码中 为 n-1

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. void sort(int nArray[], int n)
  4. {
  5.         int i, j, temp;
  6.       for (i = 0; i < n; i++) // 10个数,10 - 1轮冒泡,每一轮都将当前最大的数推到最后   
  7.       {   
  8.             for (j = 0; j < n - i; j++) // 9 - i,意思是每当经过一轮冒泡后,就减少一次比较   
  9.             if (nArray[j] > nArray[j+1])   
  10.             {   
  11.                   temp = nArray[j];   
  12.                   nArray[j] = nArray[j+1];   
  13.                   nArray[j+1] = temp;   
  14.             }   
  15.       }   
  16. }
  17. int main()
  18. {
  19.         int arr[] = {2,46,52,5,7,9,631,6,32,54};
  20.         int n,i,len;
  21.         scanf("%d",&n);
  22.         sort(arr,n-1);
  23.         len = sizeof(arr)/sizeof(int);
  24.         for (i = 0; i<len; i++)
  25.         {
  26.                 printf("%d ",arr[i]);
  27.         }
  28.         return 0;
  29. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-21 21:15:10 From FishC Mobile | 显示全部楼层
ba21 发表于 2017-11-21 20:46
首先冒泡排序不是你这么冒的。
第二,下标是从0开始,所以前8个 就意味着是 8-1
代码中 为 n-1

请问内层循环是什么意思?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-21 21:25:30 | 显示全部楼层
AppleBJTU 发表于 2017-11-21 21:15
请问内层循环是什么意思?

冒泡排序咯,不懂百度下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-21 22:01:55 From FishC Mobile | 显示全部楼层
ba21 发表于 2017-11-21 21:25
冒泡排序咯,不懂百度下。

我知道是冒泡排序,但是没太理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 07:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表