一:冒泡算法的主要实现方式:两个相邻的数字进行比较,继而根据代码所实现的功能进行排序。
eq:下面我们以char arr[] = {9,8,7,6,5,4,3,2,1,0}这个数组进行升序排列并打印为例。
思路:两个相邻的数字比较,如果arr[0] > arr[1],则arr[0]储存的数据和arr[1]所储存的数据进行交换,这样不停的比较和交换直到实现所想要的效果。
二:错误代码实例。
错误原因:数组名本质上是首元素的地址,地址应该使用指针接受,所以arr看似是一个数组,本质上是一个指针变量。因此在bubble_sort()调用函数中int sz = sizeof(arr) / sizeof(arr[0]),sizeof(arr)计算的是arr[]一维数组的首元素的地址,单位是字节,所以sizeof(arr)计算的数值根据环境不同而不同,×86环境中计算的数值为4,所以sz = 1。第一层for 循环 i = 0时,循环次数是 i < 0 次,条件不满足,调用函数无法实现,打印结果原样输出。
三:解决方法及正确代码
将求数组的长度(sizeof(arr) / sizeof(arr[0]))放在主函数内部求
四:代码分析
第一层for循环: for( i = 0; i < sz-1; i++),其中sz-1表示第sz-1次排序循环完成
第二层for循环: for( j = 0; j < sz-1-i ; j++),表示每一次排序循环中相邻的数据需要比较多少次
int sz = sizeof(arr) / sizeof(arr[0]),表示求数组arr的长度
主函数的for循环: for( i = 0; i < sz; i++)将每一个数组所储存的数据打印出来。
本期题解就结束了,我们下期再见,留个点赞和关注,防止下次找不到了,关注小蓝不迷路 。