冒泡排序以及数组名相关内容

时间:2022-11-03 19:09:21
void bubble_sort(int arr[], int sz)//冒泡排序
{
int i = 0;//确定冒泡排序的次数
for (i = 0; i < sz - 1; i++)
{
int flag = 1;//假设这一趟要排序的数据已经全部有序
//用来判断是否进入if语句,进入if语句说明还没排好序,需要继续排序
int j = 0;//每一趟冒泡排序
for (j = 0; j < sz - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
flag = 0;//本趟排序的数据其实不完全有序
}
}
if (flag == 1)//利用flag减少趟次数,提高效率
{
break;//if语句中不可以使用break语句,但此处break仍属于for循环中
}
}
}

#include<stdio.h>
int main()
{
int arr[] = {5,6,8,33,99,57 };
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);//必须在外部求好,再移到函数中
bubble_sort(arr, sz);//冒泡排序函数
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}

2.

//对于数组名,一般情况下数组名是首元素的地址
#include<stdio.h>
int main()
{
int arr[] = { 0,1,2,3,4,56 };
printf("%p\n", arr);//打印数组名
printf("%p\n", &arr[0]);//打印首元素地址
printf("%p\n", &arr);//打印数组的地址,数值上看与首元素相同,但实际上意义不同
//相当于直接跳到下一数组(当前数组的末尾)
printf("%d\n", *arr);//打印首元素,利用首元素地址
return 0;
}

//例外情况
//1.sizeof(数组名)计算整个数组的大小,sizeof内部单独放一个数组名,数组名表示整个数组
//2.&数组名,取出的是数组的地址,数组名表示整个数组
//除此之外,其他情况下的数组名均表示首元素的地址,可理解为指针