[Algorithm] Swap Two Values
Categories: Algoritma, Programming | May 13th, 2008 | by Felix J | 10 CommentsUntuk post kali ini, masih berhubungan dengan post yang sebelumnya. Pada post kali ini, saya akan menjelaskan beberapa teknik untuk menukar nilai dari 2 variabel. maksudnya jika kita mempunyai variabel a dengan nilai 1 dan variabel b dengan nilai 2. maka setelah kita tukar nilainya, variabel a mempunyai nilai 2 dan variabel b mempunyai nilai 1.
Tertarik dengan Tema ini? ![]()
Ada beberapa metode yang dapat digunakan untuk menukar nilai ini.
- Menggunakan Variabel Sementara
- Menggunakan Hanya 2 Variabel, tapi melibatkan perhitungan
- XOR (eXclusive OR), Metode Terbaik sampai saat ini.
Mari kita bahas satu per satu metode-metode diatas dihalaman-halaman 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