冒泡排序 Bubble Sort
思路(升序 Asc)
- 一个包含n个元素的数组data
- k从0到n-2,分别对比data[k]和data[k-1]的大小,如果data[k]大 就交换二者顺序
- k从0到n-3,分别对比data[k]和data[k-1]的大小,如果data[k]大 就交换二者顺序
- …一直计算k从0到1(如果数据元素个数小于2 则直接返回)
代码
class BubbleSort{
/**
* 升序排列
* @param array
* @returns {
*}
*/
static sortAsc(array){
let size = array.length;
if (size < 2){
return array;
}else {
size --
while (size > 0){
for (let i=0;i<size;i++){
let a = array[i]
let b = array[i+1]
if (a > b){
array[i] = b;
array[i+1] = a;
}
}
size--
}
}
return array;
}
/**
* 降序排列
* @param array
* @returns {
*}
*/
static sortDes(array){
let size = array.length;
if (size < 2){
return array;
}else {
size --
while (size > 0){
for (let i=0;i<size;i++){
let a = array[i]
let b = array[i+1]
if (a < b){
array[i] = b;
array[i+1] = a;
}
}
size--
}
}
return array;
}
}
效果检验
const data1 = [4, 1]
const data2 = [1, 4, 2, 5, 6]
const data3 = [4]
// test the function
console.log("升序排列: " + "输入数据: " + data1 + " 排序结果数据: " + BubbleSort.sortAsc(data1))
console.log("升序排列: " + "输入数据: " + data2 + " 排序结果数据: " + BubbleSort.sortAsc(data2))
console.log("升序排列: " + "输入数据: " + data3 + " 排序结果数据: " + BubbleSort.sortAsc(data3))
console.log("降序排列: " + "输入数据: " + data1 + " 排序结果数据: " + BubbleSort.sortDes(data1))
console.log("降序排列: " + "输入数据: " + data2 + " 排序结果数据: " + BubbleSort.sortDes(data2))
console.log("降序排列: " + "输入数据: " + data3 + " 排序结果数据: " + BubbleSort.sortDes(data3))
时间复杂度测试
const numList = [10, 100, 1000, 10000, 100000]
numList.forEach(function (num){
let data = []
for (let i=0;i<num;i++){
data.push(GetRandomNum(0, 1000))
}
console.time(`bubble sort for num ${
num}`);
BubbleSort.sortAsc(data)
console.timeEnd(`bubble sort for num ${
num}`);
})