冒泡排序的递归写法

本文探讨了一种使用递归简化冒泡排序的方法,通过每次递归确定最大值并减少参与排序的元素,最终达到排序的目的。核心思路是递归调用中排除已定位的最大值,当只剩一个元素时停止递归。
摘要由CSDN通过智能技术生成

因为觉得i,j,++,- -的太烦了

只用一个循环(确定本次参与排序的元素的最大值)。

剩下的由递归调用来减少每次参与排序的元素数量。

直到还剩下一个元素时结束递归。

思路:

每一趟排序,都是从前往后确定本次的最大值。
每一次递归调用,都是从后往前减少一个参与排序的元素。

确定最大值的逻辑是不变的。

本趟排序,经过不停的swap,最大值一定是位于参与本次排序的元素的最后一个位置。

下一次递归调用的时候要将本次确定的最大值排除在外。

也就是对这个最大值之前的元素进行最大值冒泡。

所以传入递归调用的参数是这个最大值的对应的 index 减去 1 。

这样就是在逐步减小问题的规模。

如果传入递归的 index = 0, 说明本次应该对第0个元素和他之前的元素进行排序,这个时候就剩下一个元素了,还排什么排?

这就是递归的结束条件。

package sort;

/**
 * 冒泡排序的递归写法
 */
public class BubbleSort {
   
    public static void sort(int[] arr, int endIndex){
   
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值