# 冒泡排序
依次比较相邻的数据,将小数据放在前,大数据放在后。即第一趟先比较第1个和第2个数,大数在后,小数在前,再比较第2个数与第3个数,大数在后,小数在前,直到将最大的数移动到最后一个位置。 第二趟则将次大的数移动到倒数第二个位置,...直到将第n大的数移动到第一个输的位置,便完成排序。
# 算法逻辑
冒泡排序的核心操作是对两个数据进行比较和进行交换。具体做法如下(假设需要排序的数据存在一个数组变量array里面,从左往右,从小到大排序):
- 设置变量 i=0,j=i+1 ;
- 取 a=array[i] ;
- 从数组第j个元素开始,取 b=array[j] ;
- 比较 a>b ?,如果 a>b 为真,交换 a 和 b 对应数组的值,否则不做交换。继续循环, j+1 ;
- 当 j>=array.length 时,结束循环,否则继续 3-5 步。
- i=i+1 ;
- 重复操作 2-6 直到i>=array.length,算法结束,得到的array的值就是排序完成的数组。
# 代码实现
/**
* 冒泡,升序
* @param {array} array 数值数组
* @return {array} 排好序的数据,不该变原数组
*/
function bubbleSort (array) {
let tempArray = [].concat(array)
let i = 0;
let j = 0;
let len = tempArray.length
for (i = 0; i < len; i++) {
for (j = i + 1; j < len; j++) {
let a = tempArray[i];
let b = tempArray[j];
if (a > b) {
tempArray[i] = b;
tempArray[j] = a;
}
}
}
return tempArray;
}
bubbleSort([9,8,7,6,5,4,3,2,1]);
# 总结
冒泡排序的核心操作是比较和数据交换,时间复杂为O(n^2)。算法稳定,但是效率并不高。
选择排序 →