首先是选择排序,代码如下:
#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;
}