void bubble_sort(int arr[], int n)
{for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - 1 - i; j++) {if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}
}
上述代码定义了一个名为 bubble_sort
的函数,它接受一个整数数组 arr
和数组的长度 n
作为参数。函数使用嵌套的两个for循环来实现冒泡排序算法。
外层循环从 0
到 n-2
,表示需要进行 n-1
轮比较和交换操作。内层循环从 0
到 n-2-i
,其中 i
是外层循环的索引。这是因为每一轮比较后,最大的元素都会被移动到正确的位置,所以内层循环不需要再比较已经排好序的元素。
在内层循环中,通过比较相邻的元素 arr[j]
和 arr[j+1]
,如果前者大于后者,则交换它们的位置。这样,每一轮内层循环结束后,最大的元素就会被移动到正确的位置。整个排序过程会重复进行,直到所有的元素都被正确地排序。最后,函数不返回任何值,因为它直接修改了输入的数组 arr
。
int main()
{int arr[] = {6, 3, 2, 1, 4, 5, 9};int n = sizeof(arr) / sizeof(arr[0]);bubble_sort(arr, n);printf("排序后的数组是:\n");for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");return 0;
}
在此段代码中我们定义了一个arr数组,并且初始化了元素。定义了一个整数n为数组的长度,通过sizeof()函数先计算整个数组的字节大小除以单个元素的字节大小得到。接下来就是调用bubble_sort
函数,后续通过for循环依次遍历排序后的数组依次打印。
整体展示:
上述代码我们是提前定义好的数组元素,要是想要手动输入数组元素,循环套用scanf()函数即可,bubble_sort
函数不变,详细代码如下:
int main()
{int n;printf("请输入数组元素个数: ");scanf("%d", &n);int arr[n];printf("请输入数组元素: ");for (int i = 0; i < n; i++) {scanf("%d", &arr[i]);}bubble_sort(arr, n);printf("排序后的数组为: ");for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");return 0;
}
整体展示:
由于我使用的编译环境不支持编译未知数组大小,所以我使用的是Dev C++环境给大家展示结果,大家在学习中可以自行研究练习。
结语:冒泡排序的分享到这里就结束了,希望对大家的学习会有帮助,如果大家有什么问题或者不同的见解,欢迎大家的留言~~~