1877年（明治10年）1月に日本に戻ったが、パークスの命で直ちに鹿児島視察に派遣された。鹿児島滞在中に西南戦争が勃発した。出陣直前の西郷隆盛に会ったが、ほとんど話すことはできなかった。1878年（明治11年）7月、信州、北陸方面へ旅行。長野県大町市から北アルプスを横断する立山新道を経て富山県富山市へ至っている。1880年（明治13年）に長男・栄太郎、1883年（明治16年）に次男・久吉（後の武田久吉）が生まれた。同年まで日本に滞在し、三度目の賜暇で帰国した。その後はシャム駐在総領事代理（1884年 - 1887年）、ウルグアイ駐在領事（1889年 - 1893年）、モロッコ駐在領事（1893年-1895年）を歴任した。
賜暇で帰国するためオタワ号で横浜を出港、上海・香港・シンガポール・ボンベイ・スエズ・アレクサンドリアを経由してイギリスに到着した。1870年（明治3年）11月、賜暇を終えて日本に戻った。1871年（明治4年）、鹿児島から上京してきた西郷隆盛と会った。代理公使アダムズらと箱根・江ノ島に旅行した。廃藩置県後、アダムズと岩倉具視との会談で通訳をした（議題は、廃藩置県断行の状況や農民に対する課税問題、神仏分離令など）。アダムズとオーストリアの退役外交官ヒューブナー（de:Alexander von Hübner）が明治天皇と謁見する際に通訳をした。アダムズと木戸孝允との会談で通訳をした。木戸孝允と会い新しい官制である太政官三院八省制について説明をうけた。アダムズとともに岩倉具視と会い、条約改正準備のための遣外使節団派遣やキリスト教解禁問題、日清修好条規をめぐる攻守同盟疑惑について話し合った。関東一円を旅行した。この頃、日本人女性武田兼と結婚した。1872年（明治5年）、アダムズとともに甲州を旅行、さらにワーグマンを加えて日光を旅行した。鎌倉・江ノ島を旅行した。参議・大隈重信、工部大輔・山尾庸三とともに西国巡遊の旅行をした。横浜港を出港し途中、下田・鳥羽に寄港して伊勢神宮に参拝。大阪・神戸を経由して讃岐の金毘羅宮に参拝。長崎まで行き大阪に引き返す途中、厳島神社に参拝した。京都を旅行した後、中山道を経由して東京に帰った。箱根を旅行した。1875年（明治8年）、二度目の賜暇で帰国した。
1867年12月、大政奉還の詳細を探知するためと、兵庫開港の準備のためにミットフォードとともに大坂に行き、後藤象二郎・西郷隆盛・伊藤博文らと会談した。1868年（慶応4年）1月、兵庫開港準備に伴う人事で通訳としての最高位である日本語書記官に昇進した。王政復古の大号令が出されたために京都を離れ大坂城に入った慶喜とパークスの謁見で通訳を務めた。鳥羽・伏見の戦いで旧幕府軍が敗北し、慶喜が大坂城を脱出すると、旧幕府から各国外交団の保護不可能との通達があったため兵庫へ移動した。直後に岡山藩兵が外交団を銃撃するという神戸事件が勃発したが、解決のため兵庫に派遣されてきた新政府使節・東久世通禧とパークスらとの会談で通訳にあたった。その後、戦病傷者治療のために大坂・京都に派遣されたウィリスに同行し、西郷隆盛・後藤象二郎・桂小五郎・品川弥二郎・大久保利通らと会談した。神戸に戻り、神戸事件の責任者である岡山藩士・滝善三郎の切腹に臨席した。外交団が明治天皇に謁見を行おうとした矢先に堺事件が起きたが、同事件解決後に京都に赴き、三条実美・岩倉具視を訪問、天皇謁見の際もパークスに随行した。イギリス外交団が横浜に戻った後も江戸で主に勝海舟などから情報収集にあたった。大坂でパークスの信任状奉呈式に同行し、このとき初めて天皇に謁見した。北越戦争下にある新潟視察とロシアによる国後島・択捉島占領の真偽を確認するために蝦夷地を旅行した。1869年（明治2年）、パークスとともに、東京で天皇に再度謁見した。
入力として、2の累乗の長さを持ったリストを取り、ソート済みリストを返す。 def compare_and_swap(x, a, b):    if x[a] > x[b]:        x[a], x[b] = x[b], x[a] def oddeven_merge(x, lo, hi, r):    step = r * 2    if step < hi - lo:        oddeven_merge(x, lo, hi, step)        oddeven_merge(x, lo + r, hi, step)        for i in range(lo + r, hi - r, step):            compare_and_swap(x, i, i + r)    else:        compare_and_swap(x, lo, lo + r) def oddeven_merge_sort_range(x, lo, hi):    """ 区間lo と hiのソートを行う。    注意: 端点 (lo と hi) は含むものとする。    """    if (hi - lo) >= 1:        # ひとつ以上の要素があった場合、入力を        # 長さの半分で前後に分割し、        # その後それぞれをマージソートする。        mid = lo + ((hi - lo) / 2)        oddeven_merge_sort_range(x, lo, mid)        oddeven_merge_sort_range(x, mid + 1, hi)        oddeven_merge(x, lo, hi, 1) def oddeven_merge_sort(x):    oddeven_merge_sort_range(x, 0, len(x)-1)>>> data = [2, 4, 3, 5, 6, 1, 7, 8]>>> oddeven_merge_sort(data)>>> data[1, 2, 3, 4, 5, 6, 7, 8]