冒泡排序算法的原理:
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。一趟冒泡排序让最大的数排在最后一位。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
#include2. 数组名表示数组首元素的地址void bubble_sort(int arr[])//arr[]这里看似是数组,本质是指针变量 { int i = 0; int sz = sizeof(arr) / sizeof(arr[0]);//4/4=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 tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; } } } } int main() { int arr[] = { 3,1,7,5,8,9,0,2,4,6 }; //使用冒泡排序的算法,对数组元素进行升序排序 bubble_sort(arr);//数组名本质上是数组首元素的地址 int i = 0; int sz = sizeof(arr) / sizeof(arr[0]); for (i = 0; i < sz; i++) { printf("%d ", arr[i]); } return 0; }
数组名表示数组首元素的地址,但有两个例外:
- sizeof(数组名),计算整个数组的大小,单位是字节,这里数组名表示整个数组。
- &数组名,取出的是数组的地址,这里数组名表示整个数组。
二维数组是一维数组的数组,二维数组的数组名也表示数组首元素(第一个一维数组)的地址。
3. 冒泡排序函数的正确设计#includevoid bubble_sort(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++) { if (arr[j] > arr[j + 1]) { //交换 int tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; } } } } int main() { int arr[] = { 3,1,7,5,8,9,0,2,4,6 }; //使用冒泡排序的算法,对数组元素进行升序排序 int sz = sizeof(arr) / sizeof(arr[0]); bubble_sort(arr, sz); int i = 0; for (i = 0; i < sz; i++) { printf("%d ", arr[i]); } return 0; }



