来了广东就是靓仔!!但是 --- 不学习和咸鱼有什么分别?
此文 弄 排序算法之最Sinple的冒泡排序,即便如此,他依然是不推荐使用的,至于原因嘛,各位铁子大哥小姐姐,请继续往下看🙃。
屁话少放!直接来了解什么tmd...🤸♀️额!注意素质!好
冒泡排序:比较任何两个相邻得项,如果第一个比第二个大,则交换他们。直至元素向上移动至这个确定得顺序,就像气泡上升一样。
// 先准备下排序算法的数据结构,👇
function ArrayList() {
var array = [];
this.insert = function(element) {
array.push(element);
}
this.toString = function() {
return array.join();
}
}
在 ArrayList中实现算法
// 👉 从运行时间上看 冒泡排序是最差的一个。 各位:这就是不推荐的原因---其复杂度 是 O²
this.bubbleSort = function() {
var length = array.length;
for (var i = 0; i < length; i++) {
for (var y = 0; y < length - 1; y++) {
if (array[y] > array[y + 1]) {
swap(array, y, y+1)
}
}
}
}
// 交换函数
var swap = function(array, index1, index2) {
var aux = array[index1];
array[index1] = array[index2];
array[index2] = aux;
// es6交换的方式 ---增强的对象属性
// [array[index1], array[index2]] = [array[index2], array[index1]]
}
来段测试用例 -- 是个Man就要动嘴 🤪 上手!
// 构建没有排序的数组
function createNotSortedArray(size) {
var array = new ArrayList();
for (var i = size; i > 0; i--) {
array.insert(i)
}
return array;
}
console.time('array 1')
var array = createNotSortedArray(10);
console.log(array.toString()); // 10,9,8,7,6,5,4,3,2,1
array.bubbleSort();
console.log('sorted', array.toString()); // sorted 1,2,3,4,5,6,7,8,9,10
console.timeEnd('array 1') // array 1: 1.02490234375ms
进行改进!!📌
思路:从内循环减去外循环中已经轮过的轮数,就能避免内循环中所有不必要的的比较。
// 优化
this.optimizedBubbleSort = function() {
var length = array.length;
for (var i = 0; i < length; i++) {
for (var y = 0; y < length - 1 - i; y++) {
if(array[y] > array[y + 1]) {
swap(array, y, y + 1);
}
}
}
}
最后给上一段优化后的测试 💤 时间几乎是优化前的二分之一
console.time('array 2')
var array2 = createNotSortedArray(10);
console.log(array2.toString()); // 10,9,8,7,6,5,4,3,2,1
array2.optimizedBubbleSort();
console.log('sorted', array2.toString()); // sorted 1,2,3,4,5,6,7,8,9,10
console.timeEnd('array 2') // array 2: 0.5546875ms
最后BB一句,No matter how pain, you are the world won't stop turning for you.The sun also rises.