前言:
想必来逛C站的小伙伴,应该都听说过大名鼎鼎的“冒泡排序”吧🤨,今天我们来娱乐一下,将冒泡排序“倒过来写”,然后再多此一举的用“递归”实现它。话说小名最近感觉递归还挺有意思的🤣
思路
从后向前按照数组数组长度遍历,我们规定i = list.size() - 1
如果 后面的数(i)
< 前面的数(i-1)
,就将后面的数字换到前面来。
冒泡排序
public void bubble(List<Integer> list) {
// 从后向前遍历数组
for (int i = list.size() - 1; i > 0; i--) {
for (int j = i - 1; j > 0; j--) {
// 如果前面的数字大,和后面的交换
if (list.get(j) > list.get(i)) {
int tmp = list.get(j);
list.set(j, list.get(i));
list.set(i, tmp);
}
}
}
}
递归排序
public void bubbleV2(List<Integer> list, Integer index, Integer next) {
if (index <= 0) {
return;
}
// 前面数 > 后面数 前面的和后面的交换
if (next < list.get(index)) {
Integer qian = list.get(index);
list.set(index, next);
list.set(index + 1, qian);
}
bubbleV2(list, index - 1, list.get(index - 1));
}
测试:
@Test
public void test3() {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(4);
list.add(3);
// 冒泡排序
bubble(list);
System.out.println(list);
// 递归方式
// bubbleV2(list, list.size() - 2, list.get(list.size() - 1));
// System.out.println(list);
}
输出:
[1, 3, 4]