1.冒泡排序
定义:相邻的两个数进行比较,左边大于右边进行交换,交换一趟排下来最大的在右边;
代码展示:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void paixu(int* arr, int sz)
{
int i = 0;
for (i = 0; i < sz - 1; i++)
{
int flag = 1;//假设已经有序
int j = 0;
for (j = 0; j < sz - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = 0;//这一趟没有进行交换,falg不为0,则后面不用再排序了
}
}
if (flag == 1)
{
break;
}
}
}
void print(int* arr, int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ",*(arr+i));
}
}
int main()
{
int arr[10] = { 2,1,4,3,5,7,6,9,8,0 };
int sz = sizeof(arr) / sizeof(arr[0]);
paixu(arr, sz);
print(arr, sz);
return 0;
}
经过改进定义flag,有效减少机器运行时间和效率,假设已经有序,则停止运行;
2.一维数组传参的本质
数组名是数组首元素的地址;
- 在数组传参的时候,传递的是数组名,也就是说本质上数组传参本质上传递的是数组首元素的地址。
- 所以函数形参的部分理论上应该使用指针变量来接收首元素的地址。
- 在函数内部我们写 sizeof ( arr ) 计算的是⼀个地址的大小(单位字节)而不是数组的大小(单位字节)。
- 正是因为函数的参数部分是本质是指针,所以在函数内部是没办法求的数组元素个数的。
总结:一维数组的形参可以写成数组的形式也可以写成指针的形式