冒泡排序
原理:相邻的两个元素进行比较和交换,把元素(大的元素或者小的元素,相等元素不会移动)一位一位的向后移动
JavaScript实现
let arr = [1, 3, 4, 2, 9, 5, 1];
// 排序趟数
// 由于每趟都会确定一个最大值或者最小值,并移动到最后一位,因此只需要排序n-1趟即可
for (let i = 0; i < arr.length - 1; i++) {
// 每趟排序的次数
// 由于每趟排序时最后一个值都是最大的或者最小的,所以只需要比较n-1-i次即可
for (let j = 0; j < arr.length - 1 - i; j++) {
// 比较大小,并交换位置
// 大于:升序 小于:降序
if (arr[j] > arr[j + 1]) {
let tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
console.log(arr);
实现方式说明
// eg:第一趟排序 比较6次
[1, 3, 4, 2, 9, 5, 1] // 1, 3比较
[1, 3, 4, 2, 9, 5, 1] // 3, 4比较
[1, 3, 2, 4, 9, 5, 1] // 4, 2比较 => 交换位置
[1, 3, 2, 4, 9, 5, 1] // 4, 9比较
[1, 3, 2, 4, 5, 9, 1] // 9, 5比较 => 交换位置
[1, 3, 2, 4, 5, 1, 9] // 9, 1比较 => 交换位置
// eg:第二趟排序 比较5次
[1, 3, 2, 4, 5, 1, 9] // 1, 3比较
[1, 2, 3, 4, 5, 1, 9] // 3, 2比较 => 交换位置
[1, 2, 3, 4, 5, 1, 9] // 3, 4比较
[1, 2, 3, 4, 5, 1, 9] // 4, 5比较
[1, 2, 3, 4, 1, 5, 9] // 5, 1比较 => 交换位置
// eg:第三趟排序 比较4次
[1, 2, 3, 4, 1, 5, 9] // 1, 2比较
[1, 2, 3, 4, 1, 5, 9] // 2, 3比较
[1, 2, 3, 4, 1, 5, 9] // 3, 4比较
[1, 2, 3, 1, 4, 5, 9] // 4, 1比较 => 交换位置
// eg:第四趟排序 比较3次
[1, 2, 3, 1, 4, 5, 9] // 1, 2比较
[1, 2, 3, 1, 4, 5, 9] // 2, 3比较
[1, 2, 1, 3, 4, 5, 9] // 3, 1比较 => 交换位置
// eg:第五趟排序 比较2次
[1, 2, 1, 3, 4, 5, 9] // 1, 2比较
[1, 1, 2, 3, 4, 5, 9] // 2, 1比较 => 交换位置
// eg:第六趟排序 比较1次
[1, 1, 2, 3, 4, 5, 9] // 1, 1比较