冒泡排序原理
冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换的元素,也就是说数列已经排序完成。
具体的原理就不详细说明了,csdn里有很多写得很好的文章:
冒泡排序(超详细)_hcz666的博客-CSDN博客_冒泡排序
JS代码实现
简单版:
// 冒泡排序从小到大
function bubbleSort(arr) {
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 temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
// 返回数组
return arr;
}
优化版:
// 冒泡排序从小到大
function bubbleSort(arr) {
// 如果是空数组或数组长度小于2则不需要排序,直接返回数组
if (arr == null || arr.length < 2) {
return arr;
}
for (var i = 0; i < arr.length - 1; i++) {
// 初始值为true
var isSorted = true;
for (var j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
isSorted = false; //有元素交换,所以还没有完成排序,标记变为false
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
// 若完成排序(isSorted值为true),则退出循环
if (isSorted)
break;
}
return arr;
}
进阶版:
// 冒泡排序从小到大
function bubbleSort(arr) {
// 如果是空数组或数组长度小于2则不需要排序,直接返回数组
if (arr == null || arr.length < 2) {
return arr;
}
//记录最后一次交换的位置
var lastExchangeIndex = 0;
//无序数列的边界,每次比较只需要比到这里为止
var sortBorder = arr.length - 1;
for (var i = 0; i < arr.length - 1; i++) {
// 初始值为true
var isSorted = true;
for (var j = 0; j < sortBorder; j++) {
if (arr[j] > arr[j + 1]) {
isSorted = false; //有元素交换,所以还没有完成排序,标记变为false
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
lastExchangeIndex = j;
}
}
sortBorder = lastExchangeIndex;
// 若完成排序(isSorted值为true),则退出循环
if (isSorted)
break;
}
return arr;
}