Sorting

1,259 views

Published on

Sorting

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,259
On SlideShare
0
From Embeds
0
Number of Embeds
25
Actions
Shares
0
Downloads
16
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Sorting

  1. 1. g)การเรียงลําดับข้อมล (Sorting) ู (การเรียงข้อมูลแบ่งได้เป็ นสองลักษณะคือ 1. การเรียงข้อมูลแบบภายใน (Internal Sorting) ข้อมลจะเก็บอย่ในหน่ วยความจําหลัก (main memory) และการ ขอมูลจะเกบอยู นหนวยความจาหลกเรียงลําดับข้อมูลสามารถอ่านข้อมูลแต่ละชิ้ นจากหน่ วยความจําหลักหรือเขียนขอมูลสู นวยความจาหลกไดเลย โดยไมจาเปนตองใชหนวยความจารอง เชนข้อมลส่หน่ วยความจําหลักได้เลย โดยไม่จาเป็ นต้องใช้หน่ วยความจํารอง เช่น ํดิสก์ (disk) หรือเทป (tape) สําหรับเก็บผลลัพธ์ชวคราว ั่ 1
  2. 2. 2. การเรียงลําดับข้อมูลแบบภายนอก (External Sorting) ข้อมูลมีจานวนมากเกินกว่าที่จะบรรจุุลงในพื้ นที่ความจําหลักได้หมด ู ํภายในคราวเดียว จึงต้องแบ่งข้อมูลออกเป็ นส่วนย่อย ๆ ซึ่งแต่ละส่วนมีขนาดใหญ่พอที่จะอยูในหน่ วยความจําหลักได้ และจะได้รบการเรียงโดยใช้ ญ ู่ ัแบบการคํานวณ การเรียงข้อมูลแบบภายนอกจะต้องคิดถึงเวลาที่สญเสียไป ูอันเนื่ องจากการถ่ายเทข้อมูลระหว่างเทปหรือดิสค์กบหน่ วยความจําหลัก ู ัด้วย เวลาที่สญเสียไปในการถ่ายเทปข้อมูลระหว่างหน่ วยความจําหลักกับ ูเทปหรือดิสค์จะเป็ นตัวระบุุความดีเลวของแบบการคํานวณแบบเรียงข้อมูล ูภายนอก 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 รอบที่ 2 รอบท1 5 3 10 2 15 สลับ1 3 5 10 2 151 3 5 10 2 151 3 5 2 10 15
  6. 6. รอบที่ 3 รอบท1 3 5 2 10 151 3 5 2 10 151 3 5 2 10 15 สลบ สลับ1 3 2 5 10 15
  7. 7. รอบที่ 4 รอบท1 3 2 5 10 151 3 2 5 10 15 สลบ สลับ1 2 3 5 10 15
  8. 8. 2. การเรียงลําดับแบบฮีฟซอร์ท (Heap Sort) ( p ) Heap เป็ นต้นไม้ไบนารีที่มีคุณสมบัติวาโหนดใด ๆ ในต้นไม้น้ันจะมีคา p ่ ่คียใหญ่กว่าค่าคียที่อยูใน left son และ right son ของมัน (ถ้าโหนดนั้นมีลก) ์ ์ ่ ูตัวอย่างดังรูป(ก) เป็ น heap ส่วนรูปที่ (ข) ไม่ใช่ heap ู ( ) p ู () p 90 70 45 35 60 50 39 22 33 30 35 75 30 40 20 รูป ก โครงสร้าง Heap รูป ข ไม่ใช่โครงสร้าง Heap 8
  9. 9. ขั้นตอนการทํา Heap Sort มี 3 ขั้นตอน ไ แก่ ได้ 1. สร้างโครงสร้าง heap p 2. เอาต์พุตคียที่รตโหนด ์ ู 3. ปรัั 3 ป บแต่่งต้นไ ท่ีเหลืือใ เป็ น h ้ ไม้้ ให้้ 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 35 42 I 42 42 22 42 I 22 35 22 35 10
  11. 11. อินพุต ุ ก่อนเป็ นโครงสร้าง Heap p โครงสร้าง Heap p38 42 I 42 42 22 35 38 35 38 35 22 22 38 I 32 42 42 38 35 38 35 22 32 I 22 32 11
  12. 12. อินพุต ก่อนเป็ นโครงสร้าง Heap โครงสร้าง Heap 42 42 26 38 35 38 35 I 22 32 26 22 32 26 27 42 42 38 35 38 35 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 โครงสร้างHeap ที่ได้ 14
  15. 15. โครงสราง heap ทไดกคออารเรยดงรูปท โครงสร้าง h ที่ได้ก็คืออาร์เรย์ดงรปที่ 6 ั 1 2 3 4 5 6 7 8 A 90 42 35 38 32 26 27 22ต้นไม้ที่เห็นระหว่างการสร้าง heap นั้น เป็ นการตีความข้อมูลในอาร์เรย์ p ูหลังจากที่ขอมูลเรียงในรูปโครงสร้าง heap แล้ว จะเอาเอาต์พุตค่ารูต ้โหนดซึ่งอย่ที่ตาแหน่ งที่ 1 ในอาร์เรย์ การเอาตพุตจะใหคา A(1) แลกที่โหนดซงอยู ตาแหนงท ในอารเรย การเอาต์พตจะให้ค่า ํ แลกทกับค่าสุดท้ายของอาร์เรย์ A(8) การแทนในรูปต้นไม้ ค่าที่เอาต์พุตไปแล้วจะแทนโดยโหนดสเหลยม โ โ ี่ ี่ 15
  16. 16. ต้นไม้รปที่ 7 (ข) ที่ได้ (ไม่นับโหนดสี่เหลี่ยม) ไม่เป็ นโครงสร้าง heap ู () ( ) pจากนี้ ต่อไปเราต้องใช้อลกอริทึมปรับค่าคียต่าง ๆ ในต้นไม้ให้มี ั ์คณสมบัติ 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 22 I 42 22 35 42 35 38 32 26 2738 32 26 27 90 (ข)90 (ก) 42 35 I 38 22 32 26 27 (ค) ( ) 90 รูป ค. การปรับต้นไม้ให้มีคุณสมบัต Heap ู p 18
  19. 19. I 27 I 38 27 35 38 35 22 32 26 4222 32 26 42 90 (ข)90 (ก) เอาต์พตคา 42 ได้ เอาตพุตค่า ได 38 32 35 I 22 27 26 42 90 (ค) ต้นไม้นี้เป็ น Heap ตนไมนเปน 19
  20. 20. 20
  21. 21. 3. การเรียงลําดับแบบ Quick Sort การเรยงลาดบแบบ quick sort เป็ นวิธีการเรียงลําดับข้อมลที่เหมาะกับลิสต์(รายการข้อมล) เปนวธการเรยงลาดบขอมูลทเหมาะกบลสต(รายการขอมูล) ขนาดใหญ่ และเป็ นวิธีเรียงข้อมูลที่ให้ค่าเฉลี่ยของเวลาที่ใช้น้อยที่สุด เท่าที่คนพบวิธีหนึ่ ง สมมติ A(K1, K2, ..., Kn) เป็ นลิสต์ของค่าหรือ เทาทคนพบวธหนง สมมต ้ เปนลสตของคาหรอ เรคอร์ดที่ยงไม่ได้เรียง จะเลือก K1 จากนั้นจะแบ่งลิสต์ A นี้ ออกเป็ น 2 ั ลิสต์ยอย S1 และ S2 โดยที่ ลสตยอย ่ โดยท S1 ประกอบด้วยเรคอร์ดที่มีคาคียนอยกว่า K1 ่ ์ ้ S2 ประกอบด้วยเรคอร์ดที่มีคาคียมากกว่า K1 ประกอบดวยเรคอรดทมคาคยมากกวา ่ ์ สามารถเขียนลิสต์ A ได้ดงนี้ั {S1} < K1 < {S2} 21
  22. 22. ลิิ ส ต์์ { 1 } และ { 2 } เป็ นค่่า ต่่ า ง ๆ ทีี่ ยัง ไม่่ไ ด้เ รีี ย ง จากนั้ั น ก็็ ทํา วิิธี {S {S ป็ ไ ้ดังกล่าวซํ้ากับ {S1} และ {S2} ตามลําดับ (อย่างรีเคอร์ซีฟ) ในที่สุดก็จะได้ลิิสต์ที่เรีียงตามทีี่ตองการ มีข้นตอนดงนีี้ ์ ้ ีั ั 1. การเรียงข้อมูลจะเริ่มโดยใช้พอยน์เตอร์ 2 ตัวคือ F และ Rใ ้ F มีีค่า 1 ซึึ่งก็็คือชีี้ ไปยงคาคีียตวแรก สวน R มีีค่าเทากบ n นนคืือชีี้ ไปยงให้ ไป ั ่ ์ ั ่ ่ ั ั่ ไป ัค่าคียตวสุดท้ายในลิสต์ ์ ั 2. เปรยบเทยบระหวางคาทถูกชโดย F และ R จากนนแบงลสต์ ปี ี ่ ่ ี่ ี้ โ ้ั ่ ินี้ ออกเป็ น 2 ลิสต์ยอย โดยใช้คา K1 เป็ นตัวเปรียบเทียบ ฉะนั้นพอยน์เตอร์ ่ ่ทชไปยง K1 ไ ่ ่ ป็ F หรอ R จะไมเปนตวเลอนไปยงตาแหนงอน) ี่ ี้ ไป ั ไมวาจะเปน ื ไ ่ ป็ ั ื่ ไป ั ํ ่ ื่ ) 3. ทุกครั้งที่มีการเปรียบเทียบจะมีการเลื่อนพอยน์ เตอร์ F ไปขางหนา คอจากซายไปขวา หรอ R จะเลอนถอยหลง นนคอจากขวาไปซาย ้ ้ ื ซ้ ไป ื ื่ ั ั่ ื ไปซ้การจะเลื่อนพอยน์เตอร์ตวใดให้ใช้กฏต่อไปนี้ ั 22
  23. 23. “ให้เลื่อนพอยน์เตอร์ตวที่ไม่ใช่ชี้ไปยังค่า K1 หรือที่ทาหน้าที่ K1 ในการเรียง ั ํเที่ยวนั้น เมื่อ F พบ R ที่คา K1 ก็เป็ นอันว่าเสร็จสิ้ นการเรียงเที่ยวนั้น” ่ให้ชุดคียที่จะเรียงมีดงนี้ (27, 15, 22, 37, 11, 59, 18, 50, 42) ์ ั การเรียงแถวที่ 1 27 15 22 37 11 59 18 50 42 F R 27 15 22 37 11 59 18 50 42 F R 23
  24. 24. 27 15 22 37 11 59 18 50 42แลกที่ F R 18 15 22 37 11 59 27 50 42 F R 18 15 22 37 11 59 27 50 42 F R 18 15 22 37 11 59 27 50 42 F R 24
  25. 25. 18 15 22 37 11 59 27 50 42แลกที่ F R 18 15 22 27 11 59 37 50 42 F R 18 15 22 27 11 59 37 50 42 F R 25
  26. 26. 18 15 22 27 11 59 37 50 42แลกที่ F R 18 15 22 11 27 59 37 50 42 F R 18 15 22 11 27 59 37 50 42 FR ณ จุดนี้ คีย์ 27 ได้แบ่งลิสต์ที่กาหนดให้เป็ นลิสต์ยอย 2 ลิสต์ ดังนี้ ํ ่ ( , , , ) (18, 15, 22, 11) 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) (27) (59 37 50 42) F R 28
  29. 29. 11 15 18 22 27 (59 37 50 42) F R ..... (42 37 50 59) F R .… (42 37 50 59) F R …. (42 37 50 59) F R11 15 18 22 27 (42 37 50) (59) FR 29
  30. 30. 11 15 18 22 27 ((42 37 50)) (59) ( ) F R11 15 18 22 27 ( (42 37 50)) (59) ( ) F R11 15 18 22 27 ((37 42 50)) (59) ( ) F R11 15 18 22 27 ( ) (37) (42) ( ) ( ) (50) 59) ) FRเปนชุดคยทเรยงเรยบร้้อยแล้ว ป็ ี ์ ี่ ี ี ้ 30
  31. 31. 4. การเรียงลําดับแบบ Radix Sort การเรยงลาดบแบบ การเรยงแบบนเราจะใชแตละตาแหนงตวเลขของแตละคย การเรียงแบบนี้ เราจะใช้แต่ละตําแหน่ งตัวเลขของแต่ละคีย์ โดย เริ่มตั้งแต่ตาแหน่ งนัยสําคัญน้อยที่สุด (least significant digit) ํ การเรยงกงายมาก ขนแรกใหเตรยมถง ถง ( ถง ในทน การเรียงก็งายมาก ขั้นแรกให้เตรียมถัง 10 ถัง (“ถัง” ในที่นี้ ่ อาจเป็ นคิวหรืออาร์เรย์ก็ได้) ในแต่ละเที่ยวของการเรียงจะใส่ ค่่าคีียไปเข้าแต่่ละถังตามค่่าตัวเลขในแต่่ละตําแหน่่ ง) ์ ้ ั ั ใ ํ 31
  32. 32. ให้ชุดคียที่จะเรียงมีดงนี้ (156, 425, 679, 128, 420, 067, 772, 895, ์ ั825) การเรียงเที่ยวที่ 1 กระจายค่าคียไปตามถังต่าง ๆ ตามค่าตัวเลขที่ ์ตําแหน่ งขวาสุด 156 425 679 128 420 067 772 895825 ถังที่ 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 067 128 679 การเรียงเที่ยวที่ 2 420 772 425 895 825 156 067 128679 ถังที่ 0 ถังที่ 1 ถังที่ 2 420 425 825 128 ถังที่ 3 ถังที่ 4 ถังที่ 5 156 ถังที่ 6 067 ถังที่ 7 772 679 ถังที่ 8 ถังที่ 9 895 33
  34. 34. เมื่ออ่านค่าต่าง ๆ ในแต่ละถังออกมาตามลําดับจะได้ 420 425 825 128 156 067 772 679 895 การเรียงเที่ยวที่ 3 ในเที่ยวนี้ เราจะพิจารณาตําแหน่ งซ้ายสุด 420 425 825 128 156 067 772 679 895 ถังที่ 0 067 ถังทีี่ 1 128 156 ั ถังที่ 2 ถังทีี่ 3 ั ถังที่ 4 420 425 ถังทีี่ 5 ั ถังที่ 6 679 ถังทีี่ 7 772 ั ถังที่ 8 825 895 ถังทีี่ 9 ั 34
  35. 35. เมืื่ออ่่านค่าต่่าง ๆ ในแต่่ละถังออกมาจะได้ชุดคีียที่เรีียงแล้วเป็ น ่ ใ ั ไ ้ ์ ้ ป็ดังนี้ 067 128 156 420 425 679 772 825895 35
  36. 36. 5. การเรียงลําดับแบบ Shell Sort การเรียงลําดับแบบ Shell Sort จะทําการแบ่งข้อมูล โดยกําหนดค่าที่จะอยู่ ในลสตยอยหนง ๆ ดวยการกาหนดคา h เปนระยะทางระหวางคาสองคาใด ๆ ใ ิส ์ ่ ึ่ ้ ํ ่ ป็ ่ ่ส ่ใ ในคียชุดนั้นที่จะอยูในลิสต์ยอย แต่ละลิสต์ยอยจะมีคียอยูประมาณ n/h ค่า ์ ่ ่ ่ ์ ่ การเลือกค่า hi วิธีการเลือกค่า hi มีอยูหลายแบบ ในที่นี้จะกล่าวถึง ่ 2 แบบ คือ 1. ให้เลือก hi = 2i - 1 โดยที่คา i อยูระหว่าง 1 และ (log2 n) ่ ่ 2. ชุุดค่า hi ที่ใช้ได้ดีอีกแบบหนึ่ งกําหนดโดยสมการ H i = 3i - 1 2 สํ ั ่ i อยูระหวาง 1 และ t โ ี่ t เปนคาจานวนเตมนอย สาหรบคา ่ ่ โดยท ป็ ่ ํ ็ ้ ที่สุดที่สอดคล้องกับ อสมการ ht + 2 >= n 36
  37. 37. ตวอยางตัวอย่าง จงเรยงลาดบขอมูลตอไปน 37, 32, 14, 45, 92, 18, 19, 34, 31, โดยใช จงเรียงลําดับข้อมลต่อไปนี้ 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 ตามลําดับ 7, 3, ตามลาดบ 37
  38. 38. การเรยงเทยวทการเรียงเที่ยวที่ 1 H3 = 7 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 18 19 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 18 35 92 32 45 40
  41. 41. แบบฝึึ กหัด ั1. จากข้อมูล 156, 425, 679, 128, 420, 067, 772, 895, 835 จงเรียงลําดับ ข้อมลจากน้อยไปหามากด้วยวิธีการเรียงแบบ Bubble Sort ู2. จงเรียงลําดับโดย Bubble Sort และสร้างต้นไม้แบบ Heap จากข้อมูลต่อไปนี้ 45 , 20 , 9 , 100 , 32 , 28 , 13. จากโครงสร้างต้นไม้แบบ Heap ที่ได้ในข้อ 2 ให้ นําเอาท์พุตที่ Root Nod ออก พร้อมปรับแต่งต้นไม้ให้เป็ น Heapp 41

×