Your SlideShare is downloading. ×
Sorting
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Sorting

324
views

Published on


0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
324
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. การเรีย งลำา ดับ ข้อ มูล (Sorting)การเรียงข้อมูลแบ่งได้เป็นสองลักษณะคือ 1. การเรีย งข้อ มูล แบบภายใน (Internal Sorting) ข้อมูลจะเก็บอยู่ในหน่วยความจำาหลัก (mainmemory) และการเรียงลำาดับข้อมูลสามารถอ่านข้อมูลแต่ละชิ้นจากหน่วยความจำาหลักหรือเขียนข้อมูลสู่หน่วยความจำาหลักได้เลย โดยไม่จำาเป็นต้องใช้หน่วยความจำารอง เช่น ดิสก์ (disk) หรือเทป (tape) สำาหรับเก็บผลลัพธ์ชั่วคราว 1
  • 2. 2. การเรีย งลำา ดับ ข้อ มูล แบบภายนอก (ExternalSorting) ข้อมูลมีจำานวนมากเกินกว่าทีจะบรรจุลงในพืนที่ ่ ้ความจำาหลักได้หมดภายในคราวเดียว จึงต้องแบ่งข้อมูลออกเป็นส่วนย่อย ๆ ซึ่งแต่ละส่วนมีขนาดใหญ่พอทีจะอยูในหน่วยความจำาหลักได้ และจะได้รับการ ่ ่เรียงโดยใช้แบบการคำานวณ การเรียงข้อมูลแบบภายนอกจะต้องคิดถึงเวลาทีสูญเสียไปอันเนื่องจาก ่การถ่ายเทข้อมูลระหว่างเทปหรือดิสค์กับหน่วยความจำาหลักด้วย เวลาทีสูญเสียไปในการถ่ายเทปข้อมูล ่ระหว่างหน่วยความจำาหลักกับเทปหรือดิสค์จะเป็นตัวระบุความดีเลวของแบบการคำานวณแบบเรียงข้อมูลภายนอก 2
  • 3. การเรีย งลำา ดับ แบบ Bubble Sort bubble sort เป็นแบบหนึงของ exchange sort จะ ่เปรียบ เทียบค่า 2 ค่าทีติดกัน ถ้าไม่ได้อยู่ในลำาดับที่ ่เรากำาหนด เช่นจากน้อยไปมาก ก็ให้แลกเปลี่ยนตำาแหน่งของค่าทัง 2 ค่านัน แล้วเอาค่าน้อย (หรือค่า ้ ้มาก ถ้าเป็นการเรียงจากค่ามากไปหาค่าน้อย)เปรียบเทียบกับค่าถัดไปอีกเป็นเช่นนีตลอดไป ้จนกว่าอยูในลำาดับทีถูกต้อง ่ ่ สมมติวามีรายการข้อมูล 5, 1,10, 3, 15, 2 จะ ่เรียงโดยเทคนิคของ Bubble Sort (โดยต้องการเรียงจากน้อยไปมากตามแนวบนลงล่าง) ทำาดังนี้ 3
  • 4. ขั้นตอนการทำางาน 5 1 10 3 15 2 รอบที่ 1 สลับ 1 5 10 3 15 2 1 5 10 3 15 2 สลับ 1 5 3 10 15 2 1 5 3 10 15 2 สลับ 1 5 3 10 2 15 4
  • 5. 1 5 3 10 2 15 รอบที่ 21 5 3 10 2 15 สลับ1 3 5 10 2 151 3 5 10 2 151 3 5 2 10 15
  • 6. รอบที่ 31 3 5 2 10 151 3 5 2 10 151 3 5 2 10 15 สลับ1 3 2 5 10 15
  • 7. รอบที่ 41 3 2 5 10 151 3 2 5 10 15 สลับ1 2 3 5 10 15
  • 8. 2. การเรีย งลำา ดับ แบบฮีฟ ซอร์ท (Heap Sort) Heap เป็นต้นไม้ไบนารีที่มคุณสมบัติว่าโหนดใด ๆ ใน ีต้นไม้นนจะมีค่า ั้คีย์ใหญ่กว่าค่าคียทอยูใน left son และ right son ของมัน (ถ้า ์ ี่ ่โหนดนันมีลูก) ตัวอย่างดังรูป(ก) เป็น heap ส่วนรูปที่ (ข) ้ 90 70ไม่ใช่ heap 45 35 60 50 39 22 33 30 35 75 30 40 20 รูป ก โครงสร้าง รูป ข ไม่ใช่ Heap โครงสร้าง Heap 8
  • 9. ขั้น ตอนการทำา Heap Sort มี 3 ขั้นตอน ได้แก่ 1. สร้างโครงสร้าง heap 2. เอาต์พุตคีย์ที่รูตโหนด 3. ปรับแต่งต้นไม้ทเหลือให้เป็น heap ี่
  • 10. ารสร้า งโครงสร้า ง heap ตัวอย่างจงสร้างต้นไม้แบบ heap จากข้อมูลต่อไปนี้ 22 35 42 38 32 26 27 90 อินพุต ก่อนเป็นโครงสร้าง heap โครงสร้าง heap 22 22 22 I 35 22 I 35 35 35 22 22 4 35 42 I 42 2 22 42 I 22 35 22 35 10
  • 11. ก่อนเป็นโครงสร้าง Heap โครงสร้างอินพุต 42 I 42 Heap42 38 22 35 38 35 38 35 38 22 22 I 32 42 42 38 35 38 35 22 32 I 22 32 11
  • 12. อินพุ ก่อนเป็นโครงสร้าง โครงสร้างต Heap42 Heap42 26 38 35 38 35 I 22 32 26 22 32 26 2 42 42 38 35 38 35 7 I 22 32 26 27 22 32 26 27 12
  • 13. อินพุต ก่อนเป็นโครงสร้าง โครงสร้าง Heap Heap 42 38 35 22 32 26 27 90 I 90 42 I 38 35 90 32 26 27 22 13
  • 14. อินพุต ก่อนเป็นโครงสร้าง โครงสร้าง Heap Heap 42 I 38 35 90 32 26 27 90 22 90 42 42 35 I 90 35 38 32 26 27 38 32 26 27 22 22 โครงสร้างHea p ทีได้ ่ 14
  • 15. โครงสร้าง heap ทีได้กคืออาร์เรย์ ่ ็ ดังรูปที่ 6 2 3 4 5 6 7 8 1 A 90 42 35 38 32 26 27 22ต้นไม้ที่เห็นระหว่างการสร้าง heap นั้น เป็นการตีความข้อมูลในอาร์เรย์ หลังจากที่ข้อมูลเรียงในรูปโครงสร้าง heap แล้ว จะเอาเอาต์พุตค่ารูตโหนดซึ่งอยู่ที่ตำาแหน่งที่ 1 ในอาร์เรย์ การเอาต์พุตจะให้ค่า A(1) แลกที่กับค่าสุดท้ายของอาร์เรย์ A(8) การแทนในรูปต้นไม้ ค่าที่เอาต์พุตไปแล้วจะแทนโดยโหนดสีเหลี่ยม ่ 15
  • 16. ต้นไม้รูปที่ 7 (ข) ที่ได้ (ไม่นับโหนดสีเหลี่ยม) ไม่ ่เป็นโครงสร้าง heap จากนี้ต่อไปเราต้องใช้อัลกอริทึมปรับค่าคีย์ต่าง ๆ ในต้นไม้ให้มีคุณสมบัติheap 22 90 42 35 42 35 38 26 27 38 32 26 2722 90 (ก) ก่อนเอาต์พุต (ข) หลังเอาต์พต ุ ค่า 90 ค่า 90 16
  • 17. รับ ต้น ไม้ท ี่ไ ด้จ ากการแลกค่า ให้ม ีค ณ สมบัต ิ Heap ุ การปรับแต่งทำาได้โดยเลือนค่าที่ รูตโหนดจากบนลง ่ มาล่างดังนี้ ขั้นที่ 1 : ให้ตั้งต่าพอยน์เตอร์ I ชี้ไปยังรูตโหนด ขั้นที่ 2 : ให้เลือกค่าที่ใหญ่ทสุดระหว่าง left son และ ี่ right son ของโหนด I เป็น ค่าทีเลื่อนมาอยู่ที่ ่ ตำาแหน่ง I ส่วนค่าคีย์ทตำาแหน่ง I ก็เลื่อนไปอยูที่ ี่ ่ ตำาแหน่ง left son หรือ right son ของมันทีมค่าใหญ่ ่ ี กว่า จากนันเลื่อน พอยน์เตอร์ I มาอยู่ทตำาแหน่งใหม่นี้ ้ ี่ ขั้นที่ 3 : ทำาขั้นที่ 2 จนกว่าจะทำาไม่ได้ 17
  • 18. I 42 22 I 22 35 42 35 38 32 26 2738 32 26 27 90 (ข)90 (ก) 42 38 35 I 22 32 26 27 (ค) 90 รูป ค. การปรับต้นไม้ให้มคุณสมบัต ี Heap 18
  • 19. I 38 27 I 27 35 38 35 22 32 26 4222 32 26 42 90 (ข)90 (ก) เอาต์พุตค่า 38 42 ได้ 32 35 I 22 27 26 42 90 (ค) ต้นไม้นี้เป็น Heap 19
  • 20. 20
  • 21. 3. การเรีย งลำา ดับ แบบ QuickSort quick sort เป็นวิธีการเรียงลำาดับข้อมูลที่ เหมาะกับลิสต์(รายการข้อมูล)ขนาดใหญ่ และ เป็นวิธีเรียงข้อมูลทีให้ค่าเฉลี่ยของเวลาทีใช้นอย ่ ่ ้ ทีสุดเท่าทีค้นพบวิธีหนึง สมมติ A(K1, K2, ..., ่ ่ ่ Kn) เป็นลิสต์ของค่าหรือ เรคอร์ดทียงไม่ได้ ่ ั เรียง จะเลือก K1 จากนันจะแบ่งลิสต์ A นีออกเป็น ้ ้ 2 ลิสต์ย่อย S1 และ S2 โดยที่ S1 ประกอบด้วยเรคอร์ดทีมค่าคีย์นอยกว่า ่ ี ้ K1 S2 ประกอบด้วยเรคอร์ดทีมีค่าคียมากกว่า ่ ์ K1 21
  • 22. ลิสต์ {S1} และ {S2} เป็นค่าต่าง ๆ ทียงไม่ได้เรียง ่ ั จากนันก็ทำาวิธีดังกล่าวซำ้ากับ {S1} และ {S2} ตาม ้ลำาดับ (อย่างรีเคอร์ซีฟ) ในทีสุดก็จะได้ลิสต์ทเรียงตาม ่ ี่ ทีต้องการ มีขั้นตอนดังนี้ ่ 1. การเรียงข้อมูลจะเริ่มโดยใช้พอยน์ เตอร์ 2 ตัวคือ F และ Rให้ F มีค่า 1 ซึ่งก็คือชี้ไปยังค่าคีย์ตัวแรก ส่วน R มีค่า เท่ากับ n นันคือชี้ไปยังค่าคีย์ตัวสุดท้ายในลิสต์ ่ 2. เปรียบเทียบระหว่างค่าที่ถูกชี้โดย F และ R จากนันแบ่งลิสต์นี้ออกเป็น 2 ลิสต์ยอย โดย ้ ่ ใช้ค่า K1 เป็นตัวเปรียบเทียบ ฉะนันพอยน์เตอร์ที่ชี้ ้ ไปยัง K1 ไม่ว่าจะเป็น F หรือ R จะไม่เป็นตัวเลื่อนไป ยังตำาแหน่งอื่น) 22
  • 23. “ให้เลื่อนพอยน์เตอร์ตัวทีไม่ใช่ชี้ไปยังค่า K1 หรือทีทำา ่ ่หน้าที่ K1 ในการเรียงเทียวนัน เมือ F พบ R ทีค่า K1 ก็ ่ ้ ่ ่เป็นอันว่าเสร็จสิ้นการเรียงเทียวนั้น” ่ให้ชดคีย์ที่จะเรียงมีดังนี้ (27, 15, 22, 37, ุ11, 59, 18, 50, 42) การเรีย งแถวที่ 1 27 15 22 37 1159 18 50 42 F R 27 15 22 37 11 23
  • 24. 27 15 22 3711 59 18 50 42แลกที่ F R 18 15 22 3711 59 27 50 42 FR 18 15 22 3711 59 27 50 42 24 F
  • 25. 18 15 22 3711 59 27 50 42แลกที่ F R 18 15 22 2711 59 37 50 42 F R 18 15 22 2711 59 37 50 42 25 F
  • 26. 18 15 22 2711 59 37 50 42แลกที่ F R 18 15 22 1127 59 37 50 42 FR จุดนี้ ณ คีย์ 27 ได้แบ่งลิสต์ทกำาหนดให้เป็นลิสต์ ี่ ย่อย 2 ลิสต์ ดังนี้ (18, 18 22, 11) 27 (59, 37, 15, 15 22 11 50, 42)27 59 37 50 42 26
  • 27. 18 15 22 11)(27) (59 37 50 42)แลกที่ F R (11 15 22 18)(27) (59 37 50 42) F R (11 15 22 18) ………. F R 27
  • 28. (11 15 22 18)(27) (59 37 50 42)แลกที่ F R (11 15 18 22)(27) (59 37 50 42) F R (11 15 18 22) ………. FR (11 15) (18) (22) 28(27) (59 37 50 42)
  • 29. 11 15 18 22 27 (59 37 50 42) F R ..... (42 37 50 59) F R .… (42 37 5059) F R …. (42 37 5059) F R 29
  • 30. 11 15 18 22 27 (42 3750) (59) F R 11 15 18 22 27 (42 3750) (59) F R 11 15 18 22 27 (37 4250) (59) F R 11 15 18 22 27 (37) (42)(50) 59) FR เป็นชุดคียทเรียงเรียบร้อยแล้ว ์ ี่ 30
  • 31. 4. การเรีย งลำา ดับ แบบ RadixSort การเรียงแบบนี้เราจะใช้แต่ละตำาแหน่ง ตัวเลขของแต่ละคีย์ โดยเริ่มตั้งแต่ตำาแหน่ง นัยสำาคัญน้อยที่สุด (least significant digit) การเรียงก็ง่ายมาก ขั้นแรกให้ เตรียมถัง 10 ถัง (“ถัง” ในที่นี้อาจเป็นคิว หรืออาร์เรย์ก็ได้) ในแต่ละเที่ยวของการ เรียงจะใส่คาคีย์ไปเข้าแต่ละถังตามค่าตัว ่ เลขในแต่ละตำาแหน่ง) 31
  • 32. ให้ชุดคียทจะเรียงมีดังนี้ (156, 425, 679, 128, ์ ี่420, 067, 772, 895, 825) การเรีย งเทีย วที่ 1 กระจายค่าคียไปตามถังต่าง ่ ์ๆ ตามค่าตัวเลขทีตำาแหน่งขวาสุด 156 425 679 ่ 128 420 067 772 895 825 ถังที่ 0 420 ถังที่ 1 ถังที่ 2 772 ถังที่ 3 ถังที่ 4 ถังที่ 5 425 895 825 ถังที่ 6 156 ถังที่ 7 067 ถังที่ 8 128 ถังที่ 9 679 32
  • 33. เมื่ออ่านค่าในแต่ละถังออกมาตามลำาดับจะได้ค่าต่างๆ ดังนี้420 772 425 895 825 156 067128 679 การเรีย งเทีย วที่ 2 ่ 420 772 425 895 825 156 067 128 679 ถังที่ 0 ถังที่ 1 ถังที่ 2 420 425 825 128 ถังที่ 3 ถังที่ 4 ถังที่ 5 156 ถังที่ 6 067 ถังที่ 7 772 679 33
  • 34. เมืออ่านค่าต่าง ๆ ในแต่ละถังออกมาตามลำาดับจะได้ ่ 420 425 825 128 156 067772 679 895 การเรีย งเทีย วที่ 3 ในเทียวนีเราจะ ่ ่ ้พิจารณาตำาแหน่งซ้ายสุด 420 425 825 128 156 067772 679 895 ถังที่ 0 067 ถังที่ 1 128 156 ถังที่ 2 ถังที่ 3 ถังที่ 4 420 425 ถังที่ 5 ถังที่ 6 679 ถังที่ 7 772 34
  • 35. เมื่ออ่านค่าต่าง ๆ ในแต่ละถังออกมาจะได้ชด ุคีย์ที่เรียงแล้วเป็นดังนี้ 067 128 156 420 425679 772 825 895 35
  • 36. 5. การเรีย งลำา ดับ แบบ Shell Sort การเรียงลำาดับแบบ Shell Sort จะทำาการแบ่งข้อมูล โดยกำาหนดค่าทีจะอยู่ในลิสต์ยอยหนึ่ง ๆ ด้วย ่ ่การกำาหนดค่า h เป็นระยะทางระหว่างค่าสองค่าใด ๆในคียชุดนั้นทีจะอยู่ในลิสต์ยอย แต่ละลิสต์ยอยจะมี ์ ่ ่ ่ การเลือกค่า hi วิธีการเลือกค่า hi มีอยู่หลายแบบคีย์อยู่ประมาณ n/h ค่าในทีนี้จะกล่าวถึง 2 แบบ คือ ่ 1. ให้เลือก hi = 2i - 1 โดยที่ค่า i อยูระหว่าง 1 และ ่(log2 n) 2. ชุดค่า hi ที่ใช้ไ = ีอ แบบหนึ่งกำาหนดโดย Hi ด้ด3iีก- 12สมการ บค่า i อยูระหว่าง 1 และ t โดยที่ t เป็นค่า สำาหรั ่ จำานวนเต็มน้อยที่สดทีสอดคล้องกับ อสมการ ht ุ ่ + 2 >= n 36
  • 37. ตัว อย่า ง จงเรียงลำาดับข้อมูลต่อไปนี้ 37, 32, 14, 45, 92, 18, 19, 34, 31, 35 โดยใช้ วิธีการเรียงลำาดับแบบ Shell Sort ขั้น ตอนการทำา งาน จะเลือกค่า hi จากแบบ (1) ทีกล่าวมาแล้ว เนืองจาก ่ ่ n = 10 จะได้ว่า (log2 10) = 3 ดังนั้นค่า i ทีใช้คือ 3, 2 และ 1 และจากสมการ hi = ่ 2i - 1 จะได้ h3 = 7, h2 = 3, h1 = 1 ตามลำาดับ 37
  • 38. การเรียง H3= 7เที่ยวที่ 1 37 32 14 45 92 18 19 34 31 35 การเรียงเที่ยวที่ 1 จะมี 3 ลิสต์ย่อย ดังที่ แสดงโดยเส้นที่โยงไว้ 3 ลิสต์ย่อยนี้คือ (37, 34) (32, 31) (14, 35) หลังจาก การเรียงแต่ละลิสต์ย่อยแล้วจะได้ชดตัวเลข ุ ดังนี้ 38
  • 39. การเรียงเที่ยวที่ 1 จะมี 3 ลิสต์ย่อย ดังที่แสดงโดยเส้นที่โยงไว้ 3 ลิสต์ย่อยนี้คอ (37, 34) ื(32, 31) (14, 35) หลังจากการเรียงแต่ละลิสต์ย่อยแล้วจะได้ชดตัวเลขดังนี้ ุการเรีย งเที่ย วที่ 2 h2= 3 34 31 14 45 92 1819 37 32 35 39
  • 40. การเรียงเที่ยวนี้จะประกอบด้วย 3 ลิสต์ย่อย คือ(34, 45, 19, 35)(31, 92, 37) และ (14, 18, 32) หลังจากการเรียงแต่ละลิสต์ย่อยแล้วจะได้ 19 31 14 34 37 18 35 92 32 45การเรีย งเทีย วที่ 3 h1= 1 ่ การเรียงเทียวนีจะประกอบด้วยลิสต์เพียงลิสต์ ่ ้เดียว นั่นคือทุกค่าในลิสต์นี้ การเรียงเท่ากับการใช้insertion sort หรือการเรียงแบบอื่น ๆ 19 31 14 34 37 1835 92 32 45 40
  • 41. แบบฝึก หัด1. จากข้อมูล 156, 425, 679, 128, 420, 067, 772, 895, 835 จงเรียงลำาดับ ข้อมูลจากน้อยไปหามากด้วยวิธีการเรียงแบบ Bubble Sort2. จงเรียงลำาดับโดย Bubble Sort และสร้างต้นไม้ แบบ Heap จากข้อมูลต่อไปนี้ 45 , 20 , 9 , 100 , 32 , 28 , 13. จากโครงสร้างต้นไม้แบบ Heap ทีได้ในข้อ 2 ให้ ่ นำาเอาท์พตที่ Root Nod ุ ออก พร้อมปรับแต่งต้นไม้ให้เป็น Heap 41