<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7067777943713985367</id><updated>2011-07-30T16:45:34.658-07:00</updated><title type='text'>SINGHA ALGORITHMs</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://singha-algorithms.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7067777943713985367/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://singha-algorithms.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>สิงห์ โอสถ</name><uri>http://www.blogger.com/profile/11499975276216037042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_furUmnLScVc/SmK-B2LP0WI/AAAAAAAAAjA/RAyAONOQKlw/s1600-R/singha-osot-a.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>1</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7067777943713985367.post-7040300655483836003</id><published>2009-11-19T04:56:00.000-08:00</published><updated>2010-03-21T02:27:01.630-07:00</updated><title type='text'>การ swap ค่าระหว่างตัวแปร 2 ตัว</title><content type='html'>หลังจากที่ข้าพเจ้าได้ดองบล็อกนี้มาอย่างยาวนาน ( ด้วยสถานะ 0 บทความ ห้าห้าห้า) วันนี้เป็นฤกษ์งามยามดีที่จะสร้างบทความแรกกันซะที เอ้า!!! ลุย!!!&lt;br /&gt;&lt;br /&gt;ก่อนอื่นเรามารู้จักคำว่า swap กันซะก่อน&lt;br /&gt;&lt;br /&gt;ตามพจนานุกรมฉบับกูเกิ้ลบัณฑิตยสถาน ได้ให้ความหมายไว้ว่า เมื่อใช้ทำหน้าที่เป็นคำนาม หมายถึง กการแลกของ การแลกเปลี่ยน การผลัดเปลี่ยน หรือใช้ทำหน้าที่เป็นคำกริยา หมายถึง แลกของ แลกเปลี่ยน&lt;br /&gt;&lt;br /&gt;ในทาง &lt;span style="font-weight:bold;"&gt;Computer Programming Algorithms&lt;/span&gt; คำว่า swap หมายถึง การแลกเปลี่ยนค่าระหว่างพื้นที่ตัวแปร 2 ตัว โดยผลสิ้นสุดของการแลกเปลี่ยนจะทำให้ตัวแปรแรกเก็บข้อมูลเดิมของตัวแปรที่สอง และตัวแปรที่สองเก็บข้อมูลเดิมของตัวแปรแรก&lt;br /&gt;&lt;br /&gt;ดังตัวอย่าง&lt;br /&gt;&lt;br /&gt;int a = 3;&lt;br /&gt;int b = 5;&lt;br /&gt;swap(&amp;amp;a,&amp;amp;b);&lt;br /&gt;&lt;br /&gt;ภายในฟังก์ชัน swap จะทำให้&lt;br /&gt;ตัวแปร a เป็น 5 และ&lt;br /&gt;ตัวแปร b เป็น 3&lt;br /&gt;&lt;br /&gt;ซึ่ง Algorithms ที่อยู่ภายในฟังก์ชัน swap นั้น สามารถเขียนได้มากมายหลายรูปแบบแล้วแต่ความอภิรมณ์ของโปรแกรมเมอร์ ว่าอยากจะเขียนให้งดงามมากแค่ไหน&lt;br /&gt;&lt;br /&gt;วันนี้ ข้าพเจ้าจะนำเสนอ &lt;span style="font-weight:bold;"&gt;Swap Algorithms&lt;/span&gt; พื้นฐาน 3 แบบ&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1. Swap Algorithms I : โดยอาศัยตัวแปร Temporary พักข้อมูล&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;void swap(int *a,int *b){&lt;br /&gt;       int temp;&lt;br /&gt;       temp = *a;&lt;br /&gt;                *a = *b;&lt;br /&gt;                *b = temp;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;อธิบาย Source Code :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;int temp; จองหน่วยความจำให้ตัวแปรชื่อ temp&lt;br /&gt;( a = 3, b = 5, temp = ไม่ทราบค่าที่แน่นอน)&lt;br /&gt;&lt;br /&gt;temp = *a; กำหนดให้ตัวแปร temp เก็บค่าที่อยู่ในตัวแปร a&lt;br /&gt;( a = 3, b = 5, temp = 3 )&lt;br /&gt;&lt;br /&gt;*a = *b; กำหนดให้ตัวแปร a เก็บค่าที่อยู่ในตัวแปร b&lt;br /&gt;(a = 5, b = 5, temp = 3 )&lt;br /&gt;&lt;br /&gt;*b = temp; กำหนดให้ตัวแปร b เก็บค่าที่อยู่ในตัวแปร temp&lt;br /&gt;(a = 5, b = 3, temp = 3 )&lt;br /&gt;&lt;br /&gt;ข้อดีของ Algolithms : เขียนง่าย เข้าใจง่าย อธิบายได้ง่าย&lt;br /&gt;ข้อเสียของ Algorthms : เปลืองพื้นที่ในหน่วยความจำเพื่อจองตัวแปร temp&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. Swap Algorithms II : โดยการใช้ การบวกลบ&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;void swap(int *a,int *b){&lt;br /&gt;                *b = *a - *b;&lt;br /&gt;                *a -= *b;&lt;br /&gt;                *b += *a;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;อธิบาย Source Code :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;เริ่มต้น&lt;br /&gt;(a = 3, b = 5)&lt;br /&gt;&lt;br /&gt;*b = *a - *b; กำหนดให้ตัวแปร b เก็บค่า a-b&lt;br /&gt;( a = 3, b = -2  )&lt;br /&gt;&lt;br /&gt;*a -= *b; กำหนดให้ตัวแปร a เก็บค่า a-b&lt;br /&gt;(a = 5, b = -2)&lt;br /&gt;&lt;br /&gt;*b += *a; กำหนดให้ตัวแปร b เก็บค่า b+a&lt;br /&gt;(a = 5, b = 3)&lt;br /&gt;&lt;br /&gt;ข้อดีของ Algorithms : ไม่เปลืองหน่วยความจำ&lt;br /&gt;ข้อเสียของ Algorithms : การดำเนินการทางคณิตศาสตร์ใช้เวลาในการประมวลผลมาก&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3. Swap Algorithms III : โดยการใช้ xor operator&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;void swap(int *a,int *b){&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;if(*a != *b)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;*b ^= *a;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;*a ^= *b;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;*b ^= *a;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;}&lt;/div&gt;&lt;div&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;อธิบาย Source Code :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;เริ่มต้น&lt;br /&gt;( a = 3, b = 5 เมื่อเขียนเป็นเลนฐาน 2 จะเป็น a = 0011, b =  0101)&lt;br /&gt;&lt;br /&gt;*b ^= *a; กำหนดให้ตัวแปร b เก็บค่า b xor a&lt;br /&gt;( a = 3, b = 6 เมื่อเขียนเป็นเลนฐาน 2 จะเป็น a = 0011, b =  0110)&lt;br /&gt;&lt;br /&gt;*a ^= *b; กำหนดให้ตัวแปร a เก็บค่า a xor b&lt;br /&gt;( a = 5, b = 6 เมื่อเขียนเป็นเลนฐาน 2 จะเป็น a = 0101, b =  0110)&lt;br /&gt;&lt;br /&gt;*b ^= *a; กำหนดให้ตัวแปร b เก็บค่า b xor a&lt;br /&gt;( a = 5, b = 3 เมื่อเขียนเป็นเลนฐาน 2 จะเป็น a = 0101, b =  0011)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;แต่ถ้า a และ b มีค่าเท่ากันจะไม่ดำำเนินการ เพราะ จะได้ค่า 0&lt;br /&gt;&lt;br /&gt;ข้อดีของ Algolithms : การทำงานระดับบิตใช้เวลาน้อย ไม่สิ้นเปลืองหน่วยความจำ&lt;br /&gt;ข้อเสียของ Algorthms : อธิบายได้ยากหากไม่เข้าใจการทำงานระดับบิต&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Swap Algorithms ทั้ง 3 แบบ ที่นำเสนอให้ชมกันไปนั้น เป็นเพียงตัวอย่างที่ใช้การโดยทั่วไป ซึ่งการเขียนโปรแกรมจริงๆนั้น โปรแกรมเมอร์อาจคิด Algorithms ที่สนุกกว่า หรืองดงามกว่า มาใช้ได้มากมายอย่างไร้ขีดจำกัด&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7067777943713985367-7040300655483836003?l=singha-algorithms.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://singha-algorithms.blogspot.com/feeds/7040300655483836003/comments/default' title='ส่งความคิดเห็น'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7067777943713985367&amp;postID=7040300655483836003' title='0 ความคิดเห็น'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7067777943713985367/posts/default/7040300655483836003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7067777943713985367/posts/default/7040300655483836003'/><link rel='alternate' type='text/html' href='http://singha-algorithms.blogspot.com/2009/11/swap-2.html' title='การ swap ค่าระหว่างตัวแปร 2 ตัว'/><author><name>สิงห์ โอสถ</name><uri>http://www.blogger.com/profile/11499975276216037042</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_furUmnLScVc/SmK-B2LP0WI/AAAAAAAAAjA/RAyAONOQKlw/s1600-R/singha-osot-a.gif'/></author><thr:total>0</thr:total></entry></feed>
