首先是选择排序,代码如下:

#include <stdio.h>
int main()
{
  int num[] = { 12,3,523,35,6,32124,6,234 };   //定义一个数组
  for (int i = 0; i < 8; ++i)   //输出
  {
    printf("%d ", num[i]);
  }
  printf("\n");
  for (int i = 0; i < 8; ++i)   //选择排序
  {
    for (int j = i + 1; j < 8; ++j)
    {
      if (num[i] > num[j])
      {
        int temp = 0;
        temp = num[i];
        num[i] = num[j];
        num[j] = temp;
      }
    }
  }
  for (int i = 0; i < 8; ++i)   //输出
  {
    printf("%d ", num[i]);
  }
  printf("\n");
  system("pause");
  return 0;
}

将排序算法和输出算法定义成一个函数后,如下:


#include <stdio.h>
void arrayPrint(int num[8])   //数组输出
{
  for (int i = 0; i < 8; ++i)
  {
    printf("%d ", num[i]);
  }
}
void arraySort(int num[8])   //数组排序
{
  for (int i = 0; i < 8; ++i)   //选择排序
  {
    for (int j = i + 1; j < 8; ++j)
    {
      if (num[i] > num[j])
      {
        int temp = 0;
        temp = num[i];
        num[i] = num[j];
        num[j] = temp;
      }
    }
  }
}
int main()
{
  int num[] = { 12,3,523,35,6,32124,6,234 };
  arrayPrint(num);  //调用输出函数
  printf("\n");
  arraySort(num);//调用排序函数
  arrayPrint(num);  //调用输出函数
  printf("\n");
  
  system("pause");
  return 0;
}

运行结果相同,但是此时问题出现了,当某时增加了一个量,那么函数中的长度还是没变。此时可以增加一个变量作为长度来计算。

如下:


#include <stdio.h>
void arrayPrint(int num[],int n)   //数组输出
{
  for (int i = 0; i < n; ++i)
  {
    printf("%d ", num[i]);
  }
}
//void arraySort(int num[8],int n)   //不管num[8]中8为多少,传递的都是数组的首地址
void arraySort(int num[],int n)   //数组排序
{
  for (int i = 0; i < n; ++i)   //选择排序
  {
    for (int j = i + 1; j < n; ++j)
    {
      if (num[i] > num[j])
      {
        int temp = 0;
        temp = num[i];
        num[i] = num[j];
        num[j] = temp;
      }
    }
  }
}
int main()
{
  int num[] = { 12,3,523,35,6,32124,6,234,221,167 };
  int n = sizeof(num) / sizeof(int);
  arrayPrint(num,n);  //调用输出函数
  printf("\n");
  arraySort(num,n);//调用排序函数
  arrayPrint(num,n);  //调用输出函数
  printf("\n");
  
  system("pause");
  return 0;
}

形参中的num[](不管num[8]中8为多少,传递的都是数组的首地址),就是传入了一个地址,传入的是数组的首地址,得到以下结论:

数组作为函数参数的时候会变成一个指针,这个是c语言的特色之一,如果向其他的类型一样处理,复制过来,那么当数组很时会浪费内存。

所以我们这样改程序一样:


#include <stdio.h>
void arrayPrint(int *num,int n)   //数组输出
{
  for (int i = 0; i < n; ++i)
  {
    printf("%d ", num[i]);
  }
}
void arraySort(int *num,int n)   //数组排序
{
  for (int i = 0; i < n; ++i)   //选择排序
  {
    for (int j = i + 1; j < n; ++j)
    {
      if (num[i] > num[j])
      {
        int temp = 0;
        temp = num[i];
        num[i] = num[j];
        num[j] = temp;
      }
    }
  }
}
int main()
{
  int num[] = { 12,3,523,35,6,32124,6,234,221,167 };
  int n = sizeof(num) / sizeof(int);
  arrayPrint(num,n);  //调用输出函数
  printf("\n");
  arraySort(num,n);//调用排序函数
  arrayPrint(num,n);  //调用输出函数
  printf("\n");
  
  system("pause");
  return 0;
}
Last modification:February 26, 2019
If you think my article is useful to you, please feel free to appreciate