冒泡排序
使用冒泡排序将一个数组从小到大排列的步骤:
1.从数组第一个元素开始,依次比较相邻的两个元素,如果前一个比后一个大,就交换这两个元素的位置。每一轮比较都可以确定一个最大的值放到数组末尾。
2.重复执行步骤1,直到把数组排序完成。
每执行完一次步骤1算作一轮循环,每循环一次都会得到一个最大值交换到数组末尾(如下图所示),因此下一轮循环可以少比较一个值。
JavaScript实现代码如下:
let arr = [4, 3, 5, 2, 1]
/*
假设数组有n个元素,每比较一轮都可以得到一个最大值,比较n-1轮之后,数组就只剩最后一个元素,
并且这个元素是的值是最小的,因此需要比较n-1轮,所以外层循环的判断条件是i < arr.length-1
*/
for(let i = 0; i < arr.length-1; i++){
/*
每一次比较两个元素的大小,而数组有n个元素,全部比较一次就需要比较n-1次
每比较一轮,就有一个最大的值被交换到尾部,下轮循环比较时就可以不比较这最后一个值
因此内层循环的判断条件是j < arr.length-1-i
*/
for(let j = 0; j < arr.length-1-i ; j++){
//比较两个值的大小,如果前一个比后一个大,就交换位置
if(arr[j] > arr[j+1]){
let temp = arr[j]
arr[j] = arr[j+1]
arr[j+1] = temp
}
}
}
document.write(arr)