[Algorithm] Swap Two Values
Categories: Algoritma, Programming | May 13th, 2008 | by Felix J | 10 Comments1. Menggunakan Variabel Sementara
Cara ini adalah cara termudah dan cara yang paling ‘tepat menuju sasaran’ :). Yah.. cara ini memang cara yang ‘naif’ karena menggunakan logika yang tidak rumit. melainkan logika keseharian. Logika dari cara ini adalah seperti ini:
Asumsikan kita mempunyai secangkir kopi di gelas A, dan secangkir teh di gelas B. Bagaimana cara kita untuk menukar isi dari kedua cangkir ini sehingga Kopi di gelas B, dan teh di gelas A?
Kita tinggal mendatangkan sebuah gelas C ! jadi, kopi yang di gelas A, tuang ke gelas C, dan teh yang di gelas B, tuang ke gelas A, setelah itu Kopi yang di gelas C, tuangkan ke gelas B. Tertukarlah sudah isi dari gelas itu. mudah bukan?
dengan logika sederhana ini, kita dapat membuat algoritmanya seperti berikut:
1 2 3 4 5 6 | void swap(int &a, int &b) { int c = a; a = b; b = c; } |
Yak !! Sangat mudah bukan? Bagaimana dengan penggunaannya?
Gampang ! Kita tinggal memanggil swap(a,b) saja… dan kedua isi variabel itu akan tertukar…
Bagaimana dengan Cara ke-2? Mari Kita bahas dihalaman selanjutnya…
passing parameter fungsinya bisa pake alias:
void swap(int &a, int &b) {
a ^= b;
b ^= a;
a ^= b;
// code di atas bisa juga disingkat jadi:
// a ^= b ^= a ^= b;
}
void main() {
int a = 5, b = 7;
swap(a, b);
}
anyway, good article
wah wahhh… ada om shu disini…
Ok dhe.. tar ku update ini articlenya
ditambahin dengan tambahan dari om shu
Thx masukannya Om…
hehehehe..
Challenge untuk cara ke-2 (yang nge swap pake + -):
void swap(int &a, int &b){
a += b;
b = a - b;
a -= b;
}
int main() {
int a = 1000000000;
int b = 2000000000;
printf(”Sebelum: a = %d, b = %d\n”, a,b);
swap(a,b);
printf(”Sesudah: a = %d, b = %d\n”, a,b); // hasilnya berapa?
}
Wah wah… kalo untuk GCC (32 bit compiler), sih fungsi tersebut jalan, tapi mungkin untuk 16 bit compiler, keknya ada error dhee…
Bner gk kk?
Oh haha.. gak jadi deh… kirain bisa overflow di 32 bit. Algo diatas bener untuk 32 bit maupun 16 bit kalau a dan b tidak overflow sebelum di swap.
yupp… tapi sih algo yang tambah kurang itu, kalo di coba untuk a misalkan 3 miliar dan b juga 3 miliar, tentunya sih error… karena lebih dari 2^(32-1) (2.147.483.648)
ok, aku tambahkan
Thx kk Felix untuk ngingetin ttg overflownya…
wa,,,,ternyata ko felix sudah post juga n lebih lengkap lagi.
blognya kog ada 2. yang aktif yang mana ni?
yang blog-sally itu punya pacarku
ini punyaku sendiri… ohh.. jangan panggil saya ‘ko’.. felix aja ato felix j jg boleh… *kalo felix doang ketuker ma felix halim
*
baru juga lulus SMA, dah di panggil ‘ko’ haduh… tua skali aku T_T
btw, thx dah kunjungin blog kuw.. smoga makin nambah ilmu… hehehe…
sorry ni. gq kirain felix halim. makanya gw panggil ko. iya d, gw panggil felix. heeee,,,,,
wahahhaha…. as i thought
beda orang kk… walau emang aku dan felix halim itu dekat dan saling kenal.. tapi ttp aja beda orang… hehehhe… dia itu yang ngajarin aku algo sampe lebih dalem…. 
kalo yang ini Felix J… makanya tiap post pasti ku cantumin “J” biar gk kesandung ma “Felix H” :))
felix halim tuh dia cman ada 1 kok url nya… felix-halim.net