这种方式写冒泡,更简单

简介: 接上一篇,来自我的好朋友,EvilSay 投稿的文章。以下是原文:

冒泡排序,相信大家听到这四个字都觉得很简单,我觉得也是,但能不能更简单呢?比如,用递归实现。


1、普通冒泡


public static int[] bubblerecursion (int array[]) {
    for (int i = 0;i < array.length - 1; i ++) {
        for (int j = i + 1;j < array.length;j ++) {
            if (array[j] < array[i]) {
                int temp = array[i];
                array[i] = array[j];
                array[j] = temp;
            }
        }
    }
    return array;
}


普通的冒泡排序实现方式如上面代码所示,两个 for 循环 + 一个 if 判断。且不说代码量的问题,但就这可读性就把人给烦死。下面看看清新脱俗的递归冒泡是如何实现的。


2、递归冒泡


public int[] bubblerecursion(int[] nums){
  // step 1
  for (int i = 0; i < nums.length-1; i++) { 
    // step 2
    if(nums[i + 1] < nums[i] ){
      int tmp = nums[i+ 1];
      nums[i+ 1] = nums[i];
      nums[i] = tmp;
      // step 3
      return bubblerecursion(nums);
    }
  }
  // step 4
  return nums;
}


整段代码分为 4 部分,放入 Int 数组 nums = {1, 6, 2}


step 1


第一步为递归边界,当它完成循环后要么先向上一层循环返回值,要么终止整个自身调用并返回最终处理的值,当代码运行到第一步:i=0,i 要小于数组长度减 1,i++


step 2


把数组中第 i 位与第 i+1 位进行判断,如果为 true 则进行数组位置调换并进行到 step 3,如果为 false 则进入下一次 for 循环并在 for 循环结束后进入 step 4 。注意:如果 step2 条件为 true 的话则不需要进入 step 4。


step 3


这是最绕的一步,代码调用自身形成递归。通过参数我们可以得知,如果代码执行到 step 3 那现在放入的参数变为 nums[1,2,6]。并在 step3 的时候开启一个新的循环。注意:此时代码等于停在了 step3 并等待新的循环传来的值,接收到最终循环传来的值终止自身调用并把结果返回给调用方。对比了二者,我认为递归冒泡在代码简洁性、可读性方面有优势。对于没有算法基础的朋友来说,刚接触到递归,可能会觉得有点绕,这是正常的。算法是一门很神奇的学问,它有难度、有意思,学会了往往这样的东西,能让你受益终生。

相关文章
|
18天前
|
JavaScript 前端开发
|
18天前
|
JavaScript 前端开发
事件冒泡和事件捕获的原理和区别
【10月更文挑战第15天】事件冒泡和事件捕获的原理和区别
|
2月前
|
存储 JavaScript 前端开发
js事件冒泡和事件委托
事件冒泡是指事件从最内层元素开始逐级向上传播至祖先元素的过程,默认情况下,点击子元素时会先触发自身的事件处理程序,再依次向上触发父元素的处理程序。事件委托则是在父元素上设置事件处理程序,利用事件冒泡机制处理子元素的事件,以此减少内存消耗和提高性能,特别适用于处理大量动态子元素的情况。其区别在于事件冒泡是事件传播机制的一部分,而事件委托是编程技巧,通过在父元素上绑定事件处理程序来简化子元素的事件处理。
23 0
|
4月前
|
JavaScript
js 事件流、事件冒泡、事件捕获、阻止事件的传播
js 事件流、事件冒泡、事件捕获、阻止事件的传播
73 1
|
JavaScript 前端开发
【JavaScript】事件的冒泡,委派,绑定和传播
【JavaScript】事件的冒泡,委派,绑定和传播
94 0
|
JavaScript
13、JS事件(事件绑定、事件流、阻止事件冒泡、取消元素默认行为)
13、JS事件(事件绑定、事件流、阻止事件冒泡、取消元素默认行为)
116 0
|
JavaScript 前端开发
JavaScript事件捕获与冒泡+案例分析
JavaScript事件捕获与冒泡+案例分析
233 0
JavaScript事件捕获与冒泡+案例分析
|
人工智能 算法 小程序
【算法基础】关于冒泡,我们来排个序
【算法基础】关于冒泡,我们来排个序
105 0
【算法基础】关于冒泡,我们来排个序
|
JavaScript 前端开发 数据安全/隐私保护
JavaScript之EventListener事件的传递顺序--冒泡和捕获传播
演示监听事件的传播顺序以及如何阻止这种传播。冒泡和捕获传播
1222 0