概念
冒泡排序(bubble Sort), 是一种计算机科学领域的较简单的排序算法
它重复的走访过要排序的元素列,依次比较两个相邻的元素,如果顺序错误就将他们交换过来,直到没有相邻元素需要交换,才完成整个算法的排序。
原理
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个
- 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
时间复杂度: 如果是正序的,时间复杂度是O(n),若不是,则为O(n²)
算法稳定性:冒泡排序是将小的元素往前调或把大的往后调,如果两个元素相等,则不会交换,所以它是一种稳定的排序。
算法实现
将大的元素往后调
// 将大的数往后调
function bubbleSort(arr) {
// 判断是否是数组,不是则抛出错误
if(!Array.isArray(arr)) {
throw new Error('传入的不是数组')
}
const len = arr.length;
// 判断长度是否小于等于1,是则直接返回
if(len <= 1) {
return arr;
}
// 排序操作, 将大数往后调
for (let i = len - 1; i > 1; i--) {
for (let j = 0; j < i ; j++) {
if(arr[j] > arr[j+1]) {
[arr[j],arr[j+1]] = [arr[j+1],arr[j]];
}
}
}
return arr;
}
将小的元素往前调
// 将小的数往前调
function bubbleSort(arr) {
// 判断是否是数组,不是则抛出错误
if(!Array.isArray(arr)) {
throw new Error('传入的不是数组')
}
const len = arr.length;
// 判断长度是否小于等于1,是则直接返回
if(len <= 1) {
return arr;
}
/*
排序操作, 将小数往后调
注意:
第一层循环从小到大
第二层循环大于第一层的值
*/
for (let i = 0; i < len-1; i++) {
for (let j = len-1; j > i ; j--) {
if(arr[j] < arr[j-1]) {
[arr[j],arr[j-1]] = [arr[j-1],arr[j]];
}
}
}
return arr;
}