- 1.什么是冒泡排序
- 2.冒泡排序的一个错误示范
- 3.正确的冒泡排序
- 4.扩充知识点
1.什么是冒泡排序
冒泡排序顾名思义是一种对数组中数据进行排序的方法,具体实现方法是将数组中的数据两两之间进行比较,然后通过交换数据的方式从而实现对数组中数据的由大到小或者由小到大的排列。
2.冒泡排序的一个错误示范题目:将一个数组由小到大排列并打印
#includevoid bubble_sort(int arr[]) { int sz = sizeof(arr) / sizeof(arr[0]); int i =0; for (i = 0; i < sz-1; i++) { for (int 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; } } } } int main() { int arr[10] = { 3,4,5,2,1,6,10,7,9,8}; bubble_sort(arr); for (int i = 0; i < 10; i++) { printf("%d ", arr[i]); } return 0; }
程序结果:
在这里我们发现结果并没,并没有改变。
原因如下:
在C语言中,除了sizeof()函数和&数组名以外其他任何时候使用arr时,调用的都是arr数组元素的首地址,所以在上面代码中在使用bubble_sort函数的时候传进去的时arr的首地址,所以在使用sizeof()函数的时候传进去的是一串地址而不是数组,所以才导致了结果出错。
#include4.扩充知识点void bubble_sort(int arr[],int sz)//将事先求好的数字长度直接传进函数中就好了 { int i =0; for (i = 0; i < sz-1; i++) { for (int 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; } } } } int main() { int arr[10] = { 3,4,5,2,1,6,10,7,9,8}; int sz = sizeof(arr) / sizeof(arr[0]);//在bubble_sort()函数之外先求数组长度 bubble_sort(arr,sz); for (int i = 0; i < 10; i++) { printf("%d ", arr[i]); } return 0; }
先看如下代码的输出结果
#includeint main() { int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; printf("%pn", arr); printf("%pn", &arr[0]); printf("%pn", &0[arr]); printf("%pn", &*(arr + 0)); return 0; }
1)由第一行代码证明arr代表的就是数组的一个地址
2)由第一行和第二行证明arr代表的是首地址,即首个元素的地址
3)由第一行和第三行证明 arr[i]和i[arr]代表的是数组中的统一元素,从而也证明了[ ]其实就是一个运算符,怎么写没有要求。
4)由第一行和第四行代码可以知道,arr+i的意思就是arr首地址向后加i位,
加了解引用符*后及变成了arr[i]这个元素的值,再加一个&便可以取得地址
以上便是我对冒泡排序的学习,如果有什么问题和建议欢迎大家指出和提出,谢谢大家的观看。



