JavaScript 排序算法之冒泡排序
冒泡排序(稳定)
思路:它重复地走访过要排序的数列(直到没有再需要交换),一次比较两个元素,如果它们的顺序错误就把它们交换过来。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
算法分析
最佳情况:T(n) = O(n); 当输入的数据已经是正序时(都已经是正序了,为毛何必还排序呢....)
最差情况:T(n) = O(n2); 当输入的数据是反序时(卧槽,我直接反序不就完了....)
平均情况:T(n) = O(n2)
function bubbleSort(arr) {
for(let i = 0, len = arr.length - 1; i < len; i++) {
for(let j = 0; j < len - i; j++) {
if(arr[j] > arr[j + 1]) {
let temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
}
对冒泡排序进行改进:每一趟排序操作只能找到一个最大值或最小值,我们考虑利用在每趟排序中进行正向和反向两遍冒泡的方法一次可以得到两个最终值(最大者和最小者) , 从而使排序趟数几乎减少了一半。
function bubbleSort(arr) {
let len = arr.length;
let low = 0;
let high = len - 1;
while(low < high) {
for(let i = low; i < high; i++) { // 正向冒泡 找出最大值
if(arr[i] > arr[i + 1]) {
let temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
--high;
for(let j = high; j > low; j--) { // 反向冒泡 找出最小值
if(arr[j] < arr[j - 1]) {
let temp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = temp;
}
}
++low;
}
return arr;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: 函数式编程之柯里化
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论