yuyi
冒泡排序
冒泡排序是一种简单的排序算法,其工作原理是通过重复交换相邻的元素来排序,如果它们的顺序错误就交换它们。在冒泡排序中,我们看到有两层循环,每一层循环的作用和次数都有特别的意义。
外层循环
外层循环的变量通常被称为 i
,这个循环控制整个排序过程需要多少轮比较。对于一个包含 n
个元素的数组,最多需要 n-1
轮比较来确保数组完全排序。原因是每完成一轮排序后,可以确保至少有一个元素(即最大的元素)被移动到其正确的位置(最后或开始,取决于是升序还是降序)。在每轮排序结束后,下一次排序的任务就少了一个元素,因为最后的元素已经是排序好的了。
内层循环
内层循环的变量通常被称为 j
,这个循环负责在数组中进行实际的元素比较和交换操作。内层循环的范围从数组的开始一直到 n-i-1
。这里的 n-i-1
是因为,随着外层循环每进行一次迭代,数组末尾的 i
个元素已经排好序了,因此无需再对它们进行比较。这样,每进行一轮外层循环,内层循环的次数就减少一次,因为每次都会有一个元素被正确排序在数组的末端。
为什么是 n-i-1
n-i-1
的计算确保了排序算法的效率。首先,每次内层循环结束后数组的末尾都会固定一个最大(或最小,取决于排序顺序)元素,这部分不需要再次检查。其次,这种逐步减少检查范围的方式减少了不必要的比较,从而优化了整体的排序过程。
总之,冒泡排序的两层循环结构使得每轮可以将一个元素放置在其最终位置,外层循环确保了整体的轮次,而内层循环则针对每轮未排序的部分进行操作。这样的设计虽然在效率上不如更高级的排序算法(如快速排序、归并排序等),但其实现简单,容易理解。
#include <iostream>
using namespace std;
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;
}
}
}
}