สลับค่าตัวแปรแบบไม่ใช้ temp variable

ถ้ามีโจทย์ให้สลับค่าตัวแปรสองตัว สมมุติว่า x กับ y – คิดว่าวิธีที่คนส่วนใหญ่ใช้ (ผมด้วย) คือการใช้ temporary variable “พัก” ค่าไว้ก่อนแบบนี้:

temp = x;
x = y;
y = temp;

แบบนี้เขาเรียกท่าเบสิค ลองมาดูแบบอื่นที่ไม่ต้องใช้ temp กัน

ใช้บวก ลบ คูณ หาร

x = x + y;
y = x – y;
x = x – y;

สมมุติให้ x = 9, y = 1

x = x + y;
x = 9 + 1 = 10

y = x – y;
y = 10 – 1 = 9

x = x – y;
x = 10 – 9 – 1

สุดท้าย x = 1, y = 9

วิธีนี้ให้ x เป็น temp แบบกลายๆ – คือจับสองค่ามารวมกันแล้วพักไว้ที่ x ก่อน แล้วหักค่า y จะได้ x หักค่า x (y ใหม่) ก็ได้ y

เปลี่ยนเป็นคูณ หาร ก็ได้ค่าเท่ากัน…

ใช้ XOR

XOR เป็น logical operator ตัวหนึ่ง มีความหมายว่าค่าที่เทียบสองตัวต้องไม่เหมือนกันจึงเป็น true ถ้าเหมือนเป็น false

x ^= y;
y ^= x;
x ^= y;

สมมุติให้ x = 9, y = 1

แปลงเป็นเลขฐานสอง x = 1001, y = 0001

x ^= y
x กลายเป็น 1000

y ^= x
y กลายเป็น 1001

x ^= y
x กลายเป็น 0001

แปลงกลับเป็นฐานสิบ x = 1, y = 9

สลับกันแล้วเห็นไหมเอ่ย ^-^

3 Comments

  1. oat
    Posted May 2, 2009 at 1:06 am | #

    ภาษาอะไรอะ

    python เขียน

    x,y = y,x

  2. SY
    Posted May 8, 2009 at 10:07 pm | #

    เด็ดเลย เพิ่งเคยเห็น

  3. ต่อ
    Posted November 3, 2009 at 1:22 pm | #

    ยอมใช้วิธีเดิม – -’

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>