1、什么是冒泡排序?
冒泡排序的英文Bubble Sort,是一种最基础的交换排序。之所以叫做冒泡排序,因为每一个元素都可以像小气泡一样,根据自身大小一点一点向数组的一侧移动。
冒泡排序的原理:
每一趟只能确定将一个数归位。即第一趟只能确定将末位上的数归位,第二趟只能将倒数第 2 位上的数归位,依次类推下去。如果有 n 个数进行排序,只需将 n-1 个数归位,也就是要进行 n-1 趟操作。而 “每一趟 ” 都需要从第一位开始进行相邻的两个数的比较,将较大的数放后面,比较完毕之后向后挪一位继续比较下面两个相邻的两个数大小关系,重复此步骤,直到最后一个还没归位的数。
2、冒泡排序到底是如何排序的呢?
下面通过一个动图来看一看冒泡排序到底是怎么样移动的
3、时间复杂度
由上图可知,4 个石子的时候排完序需要 3 趟,第一趟需要比较3次,第二趟需要比较2次,第三趟需要比较1次,那一共比较了 3 + 2 + 1 次;
那如果有 n 个石子呢?
那就需要 (n-1) + (n-2) +…+2+1 次,这不就是一个等差数列吗,很显然:
3、时间复杂度
由上图可知,4 个石子的时候排完序需要 3 趟,第一趟需要比较3次,第二趟需要比较2次,第三趟需要比较1次,那一共比较了 3 + 2 + 1 次;
那如果有 n 个石子呢?
那就需要 (n-1) + (n-2) +…+2+1 次,这不就是一个等差数列吗,很显然:
根据复杂度的规则,去掉低阶项(也就是 n/2),并去掉常数系数,那复杂度就是 **O(n^2)**了;
冒泡排序也是一种稳定排序,因为在两个数交换的时候,如果两个数相同,那么它们并不会因为算法中哪条语句相互交换位置。
根据复杂度的规则,去掉低阶项(也就是 n/2),并去掉常数系数,那复杂度就是 **O(n^2)**了;
冒泡排序也是一种稳定排序,因为在两个数交换的时候,如果两个数相同,那么它们并不会因为算法中哪条语句相互交换位置。
下面是用for循环if判断声明函数来做的一个小案例
function name(arr) {
var arr = [96, 95, 94, 93, 92, 91, 90, 89, 88]
//比了几轮
for (var i = 0; i < arr.length - 1; i++) {
for (var j = 0; j < arr.length - i - 1; j++) {
//当前面的元素的=值大于后面的=相邻的值时,两者的值进行交换
if (arr[j] > arr[j + 1]) {
var tem = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = tem
}
}
}
console.log(arr);
}
name()
效果图