陣列倒置(遞迴版)
原理:減而治之(Decrease and conquer):將大問題拆解成小問題來解決
常見使用此原理的演算法:Insertion Sort[玩撲克牌時的排序原理], Shell Sort和Binary Search
參考資料:https://jumperc2p.github.io/InformisTry/posts/ithome-triathlon/decon-insertion-sort/
做法1
import static java.util.Collections.swap;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<Integer> a = new ArrayList<>();
a.add(12);
a.add(33);
a.add(2);
a.add(84);
a.add(56);
a.add(5);
reverse(a, 0, a.size()-1);
}
public static void reverse(List<Integer> a, int lo, int hi) {
if (lo < hi) {// 終止條件:當兩者足夠靠近
swap(a, lo, hi);
reverse(a, lo + 1, hi - 1);// 每遞迴一次,規模少2個元素
} else
return;
}
做法2
import static java.util.Collections.swap;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<Integer> a = new ArrayList<>();
a.add(12);
a.add(33);
a.add(2);
a.add(84);
a.add(56);
a.add(5);
int lo = 0, hi = a.size()-1;
while (lo < hi) {
swap(a, lo++, hi--);
}
}
如有敘述錯誤,還請不吝嗇留言指教,thanks!