「すごいスワップ」の編集履歴(バックアップ)一覧はこちら
「すごいスワップ」(2010/10/31 (日) 20:56:33) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
2つの値を交換するには、三角代入法を使う
a=b
b=c
c=a
というやつ。
これをmemcpyを使うことでより汎用的な仕様になる。
#asciiart(blockquote){
'a,bの値を交換する。sizeにはa,bの型のサイズ
Function swap(a As *Byte, b As *Byte, size As Long) As Long
Dim s1 As *Byte
s1 = malloc(size)
If s1 = NULL Then Exit Function
memcpy(s1, a , size)
memcpy(a , b , size)
memcpy(b , s1, size)
free(s1)
swap = 1
End Function
#N88BASIC
Dim s[100] As Byte, t[100] As Byte, c As Long
Dim i As Long, j As Long
Dim a As Double, b As Double
i = 444
j = 78956
a = -8.5
b = 98.7654
lstrcpy(s, "asdf")
lstrcpy(t, "qwer789")
Print MakeStr(s);"<->"; MakeStr(t), i;"<->";j, a;"<->";b,
swap(s, t, Len(s))
swap(VarPtr(i), VarPtr(j), SizeOf(Long))
swap(VarPtr(a), VarPtr(b), SizeOf(Double))
Print MakeStr(s);"<->";MakeStr(t), i;"<->";j, a;"<->";b,
}
2つの値を交換する別の方法として、こにょうな方法は速度が遅く、
大量のデータを扱うには不向き。
そこでポインタを差し替える方法もあるが、
いずれにせよ値を交換することの内容なアルゴリズムを採択したいものだ。