LoginSignup
4
7

More than 5 years have passed since last update.

どんな言語でも通用するswap(値の入れ替え)のイメージ

Last updated at Posted at 2014-11-19

swap(値の入れ替え)は言語によっては独自の関数が用意されていることがありますが、かえってそれがアダとなって他言語(swap関数がない言語)で面倒になることがあります。

こう思う方もいるかもしれません。

swapとか簡単すぎて萎えるわw・・・何を今さr(ry ぅ・・あれ・・・何となく・・目眩が・・(保健室)

ということで今回は、どんな言語でも共通のswapの方法を紹介します。むしろ数論(?w)のようなイメージでお読みください。
最後にJavaScriptの簡単なコードもつけてみました。

swapの核心 → 一時変数tmp

tmp20141119_1.png

swapの核心がtmpと名付けられるような一時変数であることの根拠は、swapをするには少なくとも対象合わせて3つ以上の変数が必要だからです。(2つでできるのがあったらすごいけど..)swapでは、まず一時的に値を保持するための変数(ここではtemporary=「一時の,はかない,仮の」という意味であるtmpを使う)を用意します。色んな名前がありますが、まず頭にのぼるのはtmpかtempです。テンプと呼びます。

1 . tmpにAを代入(Aのコピーを作る)

tmp20141119_2.png

ここで大事というか頭に浮かべるといいのは、tmpはAのコピーだということです。

2 . AにBを代入

teisei6.png

ここから三すくみの図をイメージします。AがBを取りに行くイメージです。これでAの値はBになりました。

3 . Bにtmpを代入

teisei5.png

あとはBがAの値を引っ張ってくればいいですが、Aはもうトランスフォームして昔の面影はありません。なので、Aのコピーであるtmpを取りに行きます。

JSでさくっと書いてみると・・・

こんな感じです。

swap.js
var A = 10;
var B = 30;
console.log(A,B); //10 30

var tmp = A; //1
A = B; //2
B = tmp; //3

console.log(A,B); //30 10

swap標準関数よ、さようなら(?)

スマートではないかもしれませんが、標準関数を使わないで、なるべく同じロジックで書いてみるのもいいかもしれませんね。

4
7
8

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7