C语言实现冒泡排序详解及示例

需积分: 46 3 下载量 124 浏览量 更新于2024-07-13 收藏 879KB PPT 举报
该资源主要介绍了C语言实现的冒泡排序算法,包括冒泡排序的原理、步骤以及算法演示。 冒泡排序是一种简单的排序算法,它的基本思想是通过重复遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经过交换慢慢“浮”到数列的顶端,就像水中的气泡最终会上升到水面一样。 在冒泡排序的过程中,每一趟排序都会使当前未排序部分的最大值(或最小值,取决于排序顺序)移动到正确的位置。例如,在第一趟排序中,从第一个元素开始,比较相邻的两个元素,如果前一个元素大于后一个元素,就交换它们的位置。这样,每一轮遍历结束后,最大的元素就会被“冒”到数列的最后。 具体到C语言实现,冒泡排序的代码通常会包含一个嵌套循环。外层循环控制趟数,内层循环则负责每趟排序中的元素比较和交换。以下是一个简单的C语言冒泡排序示例: ```c void bubbleSort(int arr[], int n) { for (int i = 0; i < n - 1; i++) { // 外层循环,控制趟数 for (int j = 0; j < n - i - 1; j++) { // 内层循环,控制每趟排序的次数 if (arr[j] > arr[j + 1]) { // 比较相邻元素并交换 int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } ``` 在这个例子中,`arr[]`是待排序的数组,`n`是数组的元素个数。外层循环`i`从0到`n-2`,确保每一对相邻元素都被比较一次。内层循环`j`从0到`n-i-2`,因为随着每趟排序结束,最大的元素会被移到正确的位置,所以后续的元素不需要再进行比较。 算法演示部分给出了一个具体的排序实例,展示了冒泡排序过程中每一步的元素比较和交换情况。例如,数组`[45, 54, 12, 66, 33, 39, 10, 26, 72, 5]`在第一趟排序后,最大的元素`72`会被移到数组的末尾,接着第二趟排序会把次大的元素`66`移到倒数第二个位置,以此类推,直到整个数组排序完成。 冒泡排序的时间复杂度在最坏的情况下是O(n²),在最好的情况下(即输入数组已经是有序的)是O(n)。由于冒泡排序效率相对较低,对于大规模数据排序并不适用,但在教学和理解排序算法的基本原理时,它是一个很好的起点。