[JAVA] 第一章 緒論(下) - 迭代與遞迴 : 陣列數值反轉 - 遞迴(Decrease and conquer)

陣列倒置(遞迴版)

原理:減而治之(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!