bubble sort的概念就是像泡泡一样 ,越大的数字会渐渐的往右边浮
比较相邻的元素 ,两两比大小, 如果前面的数字大於後面的数字就交换顺序,一路把最大值往後塞。
假设现在有一个阵列[29, 10, 14, 37, 14]要用气泡排序法来排序的话
29与10相比29较大,所以29与10交换,此时arr = [10, 29, 14, 37, 14]
29与14相比29较大,所以29与14交换, 此时arr = [10, 14, 29, 37, 14]
29与37相比29较小,所以29不跟37交换, 此时arr = [10, 14, 29, 37, 14]
37与14相比37较大,所以37与14交换, 此时arr = [10, 14, 29,14, 37]
此时第一回合结束,可以发现最大的数字已经移动到最後面,依序执行n-1回合之後,就可以将全部的数字由小排到大了。
为甚麽是n-1回合?
假如今天有个阵列长度为5,当index1 ~ index4都是排序好的,那麽index0自然也会是最小的,就不需要再跑一次回合,所以只要跑 (n-1),5–1=4回合即可。
连续的步骤会如下图所示
图档来源:https://visualgo.net/zh/
const bubble = (arr) => {
for (let i = 0; i < arr.length - 1; i++) {
for (let j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
}
}
}
return arr;
};
bubble([29, 10, 14, 37, 14])
第一个回圈的长度为arr.length-1,因为经过一轮的排列,直到最後一回合,剩下的那个值必定为最小值,就不需要比较,可以扣掉一次,那第二个回圈的长度为甚麽是arr.length-i-1 ?因为经过i回合後,倒数第i个数字都是经过排序的,那麽在跑回圈的时候就可以排除掉,不需要检查了。
<<: Day04 UIKit 03 - SceneDelegate
前情提要 昨天带各位用 Selenium 写了自动发留言的 Discord 机器人,可以在指定的文字...
v-on 在Vue.js 中我们可以使用v-on去监听 DOM 事件,当事件被触发时会呼叫我们设定的...
Kneron - Kneron Toolchain 转档操作参考笔记 参考资料 onnx 档案来源:...
电子助教:「这个标题...我闻到了停刊的味道... (́⊙◞౪◟⊙‵)」 这个章节开始我们要建立「数...
今天来用 Cloudflare Workers 写个有趣的东西吧! 你的 IP 是不是 ? 很酷吧!...