void maopao(int arr[],int sz)//求元素个数的时候必须在循环之外先算好
{
int i = 0;
for (i = 0; i < sz - 1; i++)//表示总共需要移动的数组个数
{
int j = 0;
for (j = 0; j < sz - 1 - i; j++)//j相当于表示还要移动的数字个数
{
if (arr[j]>arr[j+1])
{
int t = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = t;
}
}
}
}
int main()
{
int arr[] = { 9,8,7,6,5 };
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);//这一步用于算元素个数
maopao(arr, sz);
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
break语句只用于for和switch不能用于if,因为if不是循环语句。
void maopao(int arr[], int sz)//这里的int arr[]不能用指针的形式,原因是用指针在main函数中计算数组个数会影响,且结果为1
{
int i;
int flag = 1;
for (i = 0; i < sz-1; i++)
{
int j = 0;
for (j = 0; j < sz - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int e = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = e;
flag = 0;
}
}
if (flag == 1)
{
break;//此时的break位于for循环中
}
}
}
int main()
{
int arr[] = { 6,5,4,3,2 };
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);//即这里的sz为1
maopao(arr, sz);
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
//此时的int flag是为了节省算力。
*arr——解引用,得到的结果为第一个元素值
在这里可以看到对应的结果,其中与预期不一样的是&arr+1的结果,原因是因为这个表示的是数组的地址,如果跳过表示跳过了整个数组。其他的+1都表示跳过了首元素地址。