Sorting

698 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
698
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Sorting

  1. 1. การเรีย งลำา ดับ ข้อ มูล (Sorting)การเรียงข้อมูลแบ่งได้เป็นสองลักษณะคือ 1. การเรีย งข้อ มูล แบบภายใน (Internal Sorting) ข้อมูลจะเก็บอยู่ในหน่วยความจำาหลัก (mainmemory) และการเรียงลำาดับข้อมูลสามารถอ่านข้อมูลแต่ละชิ้นจากหน่วยความจำาหลักหรือเขียนข้อมูลสู่หน่วยความจำาหลักได้เลย โดยไม่จำาเป็นต้องใช้หน่วยความจำารอง เช่น ดิสก์ (disk) หรือเทป (tape) สำาหรับเก็บผลลัพธ์ชั่วคราว 1
  2. 2. 2. การเรีย งลำา ดับ ข้อ มูล แบบภายนอก (ExternalSorting) ข้อมูลมีจำานวนมากเกินกว่าทีจะบรรจุลงในพืนที่ ่ ้ความจำาหลักได้หมดภายในคราวเดียว จึงต้องแบ่งข้อมูลออกเป็นส่วนย่อย ๆ ซึ่งแต่ละส่วนมีขนาดใหญ่พอทีจะอยูในหน่วยความจำาหลักได้ และจะได้รับการ ่ ่เรียงโดยใช้แบบการคำานวณ การเรียงข้อมูลแบบภายนอกจะต้องคิดถึงเวลาทีสูญเสียไปอันเนื่องจาก ่การถ่ายเทข้อมูลระหว่างเทปหรือดิสค์กับหน่วยความจำาหลักด้วย เวลาทีสูญเสียไปในการถ่ายเทปข้อมูล ่ระหว่างหน่วยความจำาหลักกับเทปหรือดิสค์จะเป็นตัวระบุความดีเลวของแบบการคำานวณแบบเรียงข้อมูลภายนอก 2
  3. 3. การเรีย งลำา ดับ แบบ Bubble Sort bubble sort เป็นแบบหนึงของ exchange sort จะ ่เปรียบ เทียบค่า 2 ค่าทีติดกัน ถ้าไม่ได้อยู่ในลำาดับที่ ่เรากำาหนด เช่นจากน้อยไปมาก ก็ให้แลกเปลี่ยนตำาแหน่งของค่าทัง 2 ค่านัน แล้วเอาค่าน้อย (หรือค่า ้ ้มาก ถ้าเป็นการเรียงจากค่ามากไปหาค่าน้อย)เปรียบเทียบกับค่าถัดไปอีกเป็นเช่นนีตลอดไป ้จนกว่าอยูในลำาดับทีถูกต้อง ่ ่ สมมติวามีรายการข้อมูล 5, 1,10, 3, 15, 2 จะ ่เรียงโดยเทคนิคของ Bubble Sort (โดยต้องการเรียงจากน้อยไปมากตามแนวบนลงล่าง) ทำาดังนี้ 3
  4. 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. 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. 6. รอบที่ 31 3 5 2 10 151 3 5 2 10 151 3 5 2 10 15 สลับ1 3 2 5 10 15
  7. 7. รอบที่ 41 3 2 5 10 151 3 2 5 10 15 สลับ1 2 3 5 10 15
  8. 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. 9. ขั้น ตอนการทำา Heap Sort มี 3 ขั้นตอน ได้แก่ 1. สร้างโครงสร้าง heap 2. เอาต์พุตคีย์ที่รูตโหนด 3. ปรับแต่งต้นไม้ทเหลือให้เป็น heap ี่
  10. 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. 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. 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. 13. อินพุต ก่อนเป็นโครงสร้าง โครงสร้าง Heap Heap 42 38 35 22 32 26 27 90 I 90 42 I 38 35 90 32 26 27 22 13
  14. 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. 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. 16. ต้นไม้รูปที่ 7 (ข) ที่ได้ (ไม่นับโหนดสีเหลี่ยม) ไม่ ่เป็นโครงสร้าง heap จากนี้ต่อไปเราต้องใช้อัลกอริทึมปรับค่าคีย์ต่าง ๆ ในต้นไม้ให้มีคุณสมบัติheap 22 90 42 35 42 35 38 26 27 38 32 26 2722 90 (ก) ก่อนเอาต์พุต (ข) หลังเอาต์พต ุ ค่า 90 ค่า 90 16
  17. 17. รับ ต้น ไม้ท ี่ไ ด้จ ากการแลกค่า ให้ม ีค ณ สมบัต ิ Heap ุ การปรับแต่งทำาได้โดยเลือนค่าที่ รูตโหนดจากบนลง ่ มาล่างดังนี้ ขั้นที่ 1 : ให้ตั้งต่าพอยน์เตอร์ I ชี้ไปยังรูตโหนด ขั้นที่ 2 : ให้เลือกค่าที่ใหญ่ทสุดระหว่าง left son และ ี่ right son ของโหนด I เป็น ค่าทีเลื่อนมาอยู่ที่ ่ ตำาแหน่ง I ส่วนค่าคีย์ทตำาแหน่ง I ก็เลื่อนไปอยูที่ ี่ ่ ตำาแหน่ง left son หรือ right son ของมันทีมค่าใหญ่ ่ ี กว่า จากนันเลื่อน พอยน์เตอร์ I มาอยู่ทตำาแหน่งใหม่นี้ ้ ี่ ขั้นที่ 3 : ทำาขั้นที่ 2 จนกว่าจะทำาไม่ได้ 17
  18. 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. 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. 20
  21. 21. 3. การเรีย งลำา ดับ แบบ QuickSort quick sort เป็นวิธีการเรียงลำาดับข้อมูลที่ เหมาะกับลิสต์(รายการข้อมูล)ขนาดใหญ่ และ เป็นวิธีเรียงข้อมูลทีให้ค่าเฉลี่ยของเวลาทีใช้นอย ่ ่ ้ ทีสุดเท่าทีค้นพบวิธีหนึง สมมติ A(K1, K2, ..., ่ ่ ่ Kn) เป็นลิสต์ของค่าหรือ เรคอร์ดทียงไม่ได้ ่ ั เรียง จะเลือก K1 จากนันจะแบ่งลิสต์ A นีออกเป็น ้ ้ 2 ลิสต์ย่อย S1 และ S2 โดยที่ S1 ประกอบด้วยเรคอร์ดทีมค่าคีย์นอยกว่า ่ ี ้ K1 S2 ประกอบด้วยเรคอร์ดทีมีค่าคียมากกว่า ่ ์ K1 21
  22. 22. ลิสต์ {S1} และ {S2} เป็นค่าต่าง ๆ ทียงไม่ได้เรียง ่ ั จากนันก็ทำาวิธีดังกล่าวซำ้ากับ {S1} และ {S2} ตาม ้ลำาดับ (อย่างรีเคอร์ซีฟ) ในทีสุดก็จะได้ลิสต์ทเรียงตาม ่ ี่ ทีต้องการ มีขั้นตอนดังนี้ ่ 1. การเรียงข้อมูลจะเริ่มโดยใช้พอยน์ เตอร์ 2 ตัวคือ F และ Rให้ F มีค่า 1 ซึ่งก็คือชี้ไปยังค่าคีย์ตัวแรก ส่วน R มีค่า เท่ากับ n นันคือชี้ไปยังค่าคีย์ตัวสุดท้ายในลิสต์ ่ 2. เปรียบเทียบระหว่างค่าที่ถูกชี้โดย F และ R จากนันแบ่งลิสต์นี้ออกเป็น 2 ลิสต์ยอย โดย ้ ่ ใช้ค่า K1 เป็นตัวเปรียบเทียบ ฉะนันพอยน์เตอร์ที่ชี้ ้ ไปยัง K1 ไม่ว่าจะเป็น F หรือ R จะไม่เป็นตัวเลื่อนไป ยังตำาแหน่งอื่น) 22
  23. 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. 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. 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. 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. 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. 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. 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. 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. 31. 4. การเรีย งลำา ดับ แบบ RadixSort การเรียงแบบนี้เราจะใช้แต่ละตำาแหน่ง ตัวเลขของแต่ละคีย์ โดยเริ่มตั้งแต่ตำาแหน่ง นัยสำาคัญน้อยที่สุด (least significant digit) การเรียงก็ง่ายมาก ขั้นแรกให้ เตรียมถัง 10 ถัง (“ถัง” ในที่นี้อาจเป็นคิว หรืออาร์เรย์ก็ได้) ในแต่ละเที่ยวของการ เรียงจะใส่คาคีย์ไปเข้าแต่ละถังตามค่าตัว ่ เลขในแต่ละตำาแหน่ง) 31
  32. 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. 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. 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. 35. เมื่ออ่านค่าต่าง ๆ ในแต่ละถังออกมาจะได้ชด ุคีย์ที่เรียงแล้วเป็นดังนี้ 067 128 156 420 425679 772 825 895 35
  36. 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. ตัว อย่า ง จงเรียงลำาดับข้อมูลต่อไปนี้ 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. 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. 39. การเรียงเที่ยวที่ 1 จะมี 3 ลิสต์ย่อย ดังที่แสดงโดยเส้นที่โยงไว้ 3 ลิสต์ย่อยนี้คอ (37, 34) ื(32, 31) (14, 35) หลังจากการเรียงแต่ละลิสต์ย่อยแล้วจะได้ชดตัวเลขดังนี้ ุการเรีย งเที่ย วที่ 2 h2= 3 34 31 14 45 92 1819 37 32 35 39
  40. 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. 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

×