AppleBJTU 发表于 2017-11-21 20:12:50

有一个小问题

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


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

#include <stdio.h>
#include <stdlib.h>
void sort(int nArray[], int n)
{
        int temp,i,j;
        for(i=0;i<n;i++){
                if(nArray<nArray)
                {
                        temp=nArray;
                        nArray=nArray;
                        nArray=temp;
                }
                else continue;
                for(i=n;i>=0;i--){
                if(nArray>nArray)
                {
                        temp=nArray;
                        nArray=nArray;
                        nArray=temp;
                }
                else continue;
        }
        }
}
int main()
{
        int arr[] = {2,46,52,5,7,9,631,6,32,54};
        int n,i,len;
        scanf("%d",&n);
        sort(arr,n);
        len = sizeof(arr)/sizeof(int);
        for (i = 0; i<len; i++)
      {
                printf("%d ",arr);
      }
        return 0;
}


不知道为什么当我输入5的时候是前7个数排序了,输入8的时候是10个数全部排序了,只有我把主函数中scanf里的n改成n-2以后才正常,想知道是哪里的问题。

ba21 发表于 2017-11-21 20:46:57

首先冒泡排序不是你这么冒的。
第二,下标是从0开始,所以前8个 就意味着是 8-1
代码中 为 n-1

#include <stdio.h>
#include <stdlib.h>
void sort(int nArray[], int n)
{
        int i, j, temp;
      for (i = 0; i < n; i++) // 10个数,10 - 1轮冒泡,每一轮都将当前最大的数推到最后   
      {   
            for (j = 0; j < n - i; j++) // 9 - i,意思是每当经过一轮冒泡后,就减少一次比较   
            if (nArray > nArray)   
            {   
                  temp = nArray;   
                  nArray = nArray;   
                  nArray = temp;   
            }   
      }   
}
int main()
{
      int arr[] = {2,46,52,5,7,9,631,6,32,54};
      int n,i,len;
      scanf("%d",&n);
      sort(arr,n-1);
      len = sizeof(arr)/sizeof(int);
      for (i = 0; i<len; i++)
      {
                printf("%d ",arr);
      }
      return 0;
}

AppleBJTU 发表于 2017-11-21 21:15:10

ba21 发表于 2017-11-21 20:46
首先冒泡排序不是你这么冒的。
第二,下标是从0开始,所以前8个 就意味着是 8-1
代码中 为 n-1

请问内层循环是什么意思?

ba21 发表于 2017-11-21 21:25:30

AppleBJTU 发表于 2017-11-21 21:15
请问内层循环是什么意思?

冒泡排序咯,不懂百度下。

AppleBJTU 发表于 2017-11-21 22:01:55

ba21 发表于 2017-11-21 21:25
冒泡排序咯,不懂百度下。

我知道是冒泡排序,但是没太理解
页: [1]
查看完整版本: 有一个小问题