1 / 52

บทที่ 9 การเรียงลำดับข้อมูล ( Sorting )

บทที่ 9 การเรียงลำดับข้อมูล ( Sorting ). By Juthawut Chantharamalee. ประเภทการเรียงลำดับข้อมูล (Sort Classifications). การเรียงลำดับข้อมูลแบบภายใน (Internal Sorting).

Télécharger la présentation

บทที่ 9 การเรียงลำดับข้อมูล ( Sorting )

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. บทที่ 9 การเรียงลำดับข้อมูล (Sorting) By Juthawut Chantharamalee วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  2. ประเภทการเรียงลำดับข้อมูล (Sort Classifications) การเรียงลำดับข้อมูลแบบภายใน (Internal Sorting) เป็นการเรียงลำดับข้อมูลภายในหน่วยความจำหลัก (Primary Memory) ของเครื่องคอมพิวเตอร์ โดยข้อมูลทั้งหมดจะอยู่ในหน่วยความจำหลักในระหว่างการประมวลผลเพื่อจัดเรียงข้อมูล สำหรับการเรียงลำดับข้อมูลแบบภายในจะเหมาะสมกับข้อมูลในปริมาณไม่มาก อันเนื่องมาจากหน่วยความจำหลักนั้นมีความจำกัด โดยตัวอย่างวิธีการเรียงลำดับข้อมูลแบบภายใน เช่น Insertion Sort, Shell Sort, Selection Sort, Heap Sort, Bubble Sort, และ Quick Sort เป็นต้น วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  3. การเรียงลำดับข้อมูลแบบภายนอก (External Sorting) เป็นการเรียงลำดับข้อมูลภายในหน่วยความจำหลัก เฉพาะส่วนข้อมูลที่ต้องการจัดการเรียงในขณะนั้น กล่าวคือ ข้อมูลทั้งหมดที่ต้องการจัดเรียงจะไม่สามารถนำไปใส่ไว้ในหน่วยความจำหลักพร้อมกันเพื่อประมวลผลได้ทั้งหมดในคราวเดียวกัน เนื่องจากมีปริมาณข้อมูลมาก ดังนั้นจึงต้องกันข้อมูลบางส่วนไปเก็บไว้ในสื่อจัดเก็บข้อมูลสำรอง (Secondary Storage) เช่น ฮาร์ดดิสก์ หรือเทป สำหรับเรียงลำดับข้อมูลแบบภายนอกนี้เหมาะสมกับการเรียงลำดับข้อมูลในปริมาณมาก วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  4. Selection Heap Insertion Heap Bubble Quick รูปที่ 9.1 ประเภทของการเรียงลำดับข้อมูล วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  5. 1. ประเภทการเรียงลำดับแบบภายใน (Internal) 1.1 วิธีการเรียงลำดับแบบเลือก (Selection) 1.11 การเรียงลำดับข้อมูลแบบ Selection Sort 1.12 การเรียงลำดับข้อมูลแบบ Heap Sort 1.2 วิธีการเรียงลำดับแบบแทรก (Insertion) 1.21 การเรียงลำดับข้อมูลแบบ Insertion Sort 1.22 การเรียงลำดับข้อมูลแบบ Shell Sort วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  6. 1.3 วิธีการเรียงลำดับแบบแลกเปลี่ยน (Exchange) 1.31 การเรียงลำดับข้อมูลแบบ Bubble Sort 1.32 การเรียงลำดับข้อมูลแบบ Quick Sort 2. ประเภทการเรียงลำดับแบบภายนอก (External) 2.1วิธีการเรียงลำดับแบบผสาน 2.21 การเรียงลำดับข้อมูลแบบ Merge Sort วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  7. ลำดับการจัดเรียง (Sort Order) ข้อมูลสามารถที่จะทำการจัดเรียงจากน้อยไปมาก (Ascending)หรือลำดับจากมากไปน้อย (Descending)ก็ได้ ซึ่งลำดับการเรียงจะขึ้นอยู่กับคุณสมบัติของข้อมูลที่จะนำไปจัดเรียง ตัวอย่างข้อมูลที่เหมาะกับการจัดเรียงจากน้อยไปมาก เช่น สมุดโทรศัพท์ พจนานุกรม สำหรับการจัดเรียงจากมากไปหาน้อย เช่น เกรดเฉลี่ยสะสมของนักศึกษา หรือคะแนนของผู้เล่นเกมส์ ซึ่งมักจะเป็นสถิติจากลำดับสูงลงมาต่ำ เป็นต้น วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  8. ประสิทธิภาพของการเรียงลำดับข้อมูล (Sort Efficiency) ประสิทธิภาพของการเรียงลำดับข้อมูล คือ การวัดผลประสิทธิภาพเชิงสัมพันธ์ของการเรียงลำดับข้อมูล ซึ่งโดยปกติแล้ว ได้มีการประมาณค่าจากการเปรียบเทียบ และการเคลื่อนย้ายลำดับเพื่อจัดเรียงภายในลิสต์ที่ไม่ได้เรียงลำดับข้อมูลไว้ โดยในที่นี้จะกล่าวถึงการวัดประสิทธิภาพของการเรียงลำดับข้อมูลแบบภายในเท่านั้น ซึ่งประสิทธิภาพของการเรียงลำดับข้อมูลของแต่ละอัลกอริทึมจะใช้แทนสัญลักษณ์บิ๊กโอ เช่น ปประสิทธิภาพการจักเรียงข้อมูล O(n) ย่อมดีกว่า O(n2) วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  9. วิธีการเรียงลำดับข้อมูล การเรียงลำดับข้อมูลแบบ Selection Sort การเรียงลำดับข้อมูลแบบ Selection Sort หรือการเรียงลำดับข้อมูลแบบเลือกถือว่าเป็นวิธีการเรียงลำดับข้อมูลที่เรียบง่าย ตรงไปตรงมาวิธีหนึ่ง การทำงานในแต่ละรอบของวิธีนี้ จะทำการค้นหาหรือสแกนค่าค้นหาตั่งแต่แรกจนถึงตัวสุดท้าย หลังจากที่ได้พบตำแหน่งของค่าที่น้อยที่สุดแล้วก็จะทำการสลับตำแหน่งกัน จากนั้นในรอบต่อไป ก็จะขยับตำแหน่งไปยังตัวถัดไป โดยจะทำเช่นนี้ไปเรื่อยๆ จนครบทุกตัว ก็จะได้ชุดข้อมูลที่จัดเรียงเรียบร้อยสมบูรณ์ วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  10. Wall … Minimum ( a[k] … a[last]) 0 j k Last Sorted Unsorted รูปที่ 9.2 หลักการเรียงลำดับข้อมูลแบบ Selection Sort วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  11. Ex. การเรียงข้อมูลแบบ Selection Sort โดยการใช้หลักเกณฑ์จากรูปที่ 9.2 โดยสมมุติว่ามีข้อมูลที่ต้องการจัดเรียงดังนี้{23, 78, 45, 8, 32, 56} ขั้นตอนที่ 1: เริ่มต้นจากข้อมูลต้นฉบับ ซึ่งเป็นชุดตัวเลขที่ยังไม่ผ่านการจัดเรียงทั้งหมด โดยให้ทำการค้นหาค่าที่น้อยที่สุดจากช่องที่ 1 ไปจนถึงช่องที่ 6 ผลที่ได้คือ 8 หลังจากนั้นให้ทำการสลับตำแหน่งกับ 23 และในส่วนของกำแพงก็จะเลื่อนขยับเข้าไปหนึ่งตำแหน่ง 23 78 45 8 32 56 8 78 45 23 32 56 Unsorted Unsorted วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  12. ขั้นตอนที่ 2: เริ่มต้นจากช่องที่ 2 คือตัวเลข 78 ไปจนถึงช่องที่ 6 พบค่าน้อยที่สุกคือ 23 ให้ทำการสลับตำแหน่งระหว่างตัวเลขตัวเลขที่ 78 กับ 23 และในส่วนของกำแพงก็จะเลื่อนขยับเข้าไปหนึ่งตำแหน่ง 8 78 45 23 32 56 8 23 45 78 32 56 Unsorted Sorted Unsorted วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  13. ขั้นตอนที่ 3: เริ่มต้นจากช่องที่ 3 คือตัวเลข 45 ไปจนถึงช่องที่ 6 พบค่าน้อยที่สุกคือ 32 ให้ทำการสลับตำแหน่งระหว่างตัวเลขตัวเลขที่ 45 กับ 32 และในส่วนของกำแพงก็จะเลื่อนขยับเข้าไปหนึ่งตำแหน่ง 8 23 32 78 45 56 8 23 45 78 32 56 Sorted Unsorted Sorted Unsorted วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  14. ขั้นตอนที่ 5: สำหรับรอบนี้ จักเป็นรอบสุดท้าย เนื่องจากภายในลิสต์เหลือเพียงข้อมูลสองตัวสุดท้ายคือ 78 และ 56 ปรากฏว่าค่า 56 น้อยกว่า จึงทำการสลับตำแหน่งกัน หลังจากนั้น ก็คงเหลือไว้แต่เพียงข้อมูลที่ได้จัดเรียงไว้อย่างสมบูรณ์ 8 23 32 45 56 78 8 23 32 45 78 56 Sorted Sorted Unsorted วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  15. Algorithm seleetionSort (list, last) Sorts list array by selecting smallest element in unsorted portion of array and exchanging it with element at the beginning of the unsorted list Pre list must contain at least one item last contains index to last element in the list Post list has been rearranged smallest to largest 1 set current to 0 2 loop (until last element sorted) 1 set smallest to current 2 set walker to current + 1 3 loop (walker <= last) 1 if (walker key < smallest key) 1 set smallest to walker 2 increment walker 4 end loop Smallest selected: exchange with current element. 5 exchange (current, smallest) 6 increment current 3 end loop end seleetionSort อัลกอริทึมที่ 9.1 Selection Sort วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  16. การเรียงลำดับข้อมูลแบบ Heap Sort การเรียงลำดับข้อมูลแบบ Heap Sort จะเริ่มต้นทำงานจากอาร์เรย์ที่มีจัดการเรียงลำดับข้อมูลแบบฮีพ ซึ่งคุณสมบัติสำคัญของฮีพทรีก็คือ รูทโหนดจะมีค่ามากที่สุด และในการแทนฮีพในอาร์เรย์ ค่าที่มากที่สุดจะอยู่ที่ตำแหน่งแรกสลับกับค่าสุดท้ายของฮีพ และจะดำเนินการเช่นนี้ไปจนกระทั่งได้จัดการกับข้อมูลทั้งหมดในฮีพก็จะได้ข้อมูลที่จัดเรียงเรียบร้อยอย่างสมบูรณ์ วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  17. 78 [0] 56 32 [1] [2] 45 8 23 19 78 56 32 45 8 23 19 [3] [4] [5] [6] [0] [1] [2] [3] [4] [5] [6] (b) การแทนฮีพทรีในอาร์เรย์ (a) ฮีพทรี รูปที่ 9.3 การแทนฮีพทรีในหน่วยความจำด้วยอาร์เรย์ วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  18. 78 32 56 8 23 45 After heap heap After pass 1 and reheap 56 32 45 8 23 78 heap sort After pass 2 and reheap 45 32 23 8 56 78 heap sort After pass 3 and reheap 32 8 23 45 56 78 heap sort After pass 4 and reheap 23 8 32 45 56 78 heap sort After pass 5 and reheap 8 23 32 45 56 78 heap sort After pass 6 and reheap 8 23 32 45 56 78 sort รูปที่ 9.4 ขั้นตอนการเรียงลำดับข้อมูลแบบ Heap Sort วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  19. Algorithm heapSort (heap, last) Sort an array, using a heap. Pre heap array is filled last is index to last element in array Post heap array has been sorted Create heap 1 set walker to 1 2 loop (heap built) 1 reheapUp (heap, walker) 2 increment walker 3 end loop Heap created. Now sort it. 4 set sorted to last 5 loop {until all data sorted) 1 exchange (heap, 0, sorted) 2 decrement sorted 3 reheapDown (heap, 0, sorted) 6 end loop end heapSort อัลกอริทึมที่ 9.2Heap Sort วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  20. ประสิทธิภาพของอัลกอริทีมการเรียงลำดับข้อมูลแบบ Heap ที่เขียนอยู่ในรูปแบบสัญลักษณ์บิกโอก็คือ O(nlogn)) n Number of loops Selection Sorted Heap Sorted 25 625 116 100 10,000 664 500 250,000 4,482 1000 1,000,000 9,965 2000 4,000,000 10,965 รูปที่ 9.5 ตารางเปรียบเทียบจำนวนรอบการทำงานของ Selection Sort และ Heap Sort วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  21. การเรียงลำดับข้อมูลแบบ Insertion Sort การเรียงลำดับข้อมูลแบบ insertion Sort หรือการเรียงลำดับข้อมูลแบบแทรก จัดเป็นวิธีการเรียงลำดับข้อมูลที่ไม่ซับซ้อนเช่นกัน วิธีนี้เป็นพื้นฐานทางเทคนิคที่นำไปใช้ในการเรียงไฟด้วยมือ โดยผู้เล่นจะทำการจัดเรียงไฟด้วยการดึงไฟที่ต้องการออกมาแทรกในตำแหน่งที่เหมาะสมในช่วงลำดับการเรียงมนขณะนั้น โดยพิจารณาจากรูปที่ 9.6 ซึ่งเป็นภาพแสดงหลักการเรียงลำดับข้อมูลแบบ Insertion Sort วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  22. Wall … … 0 j k Last Sorted Unsorted รูปที่ 9.6 หลักการเรียงลำดับข้อมูลแบบ Insertion Sort วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  23. Ex. การเรียงข้อมูลแบบ Insertion Sort โดยการใช้หลักเกณฑ์จากรูปที่ 9.6 โดยสมมุติว่ามีข้อมูลที่ต้องการจัดเรียงดังนี้{23, 78, 45, 8, 32, 56} ขั้นตอนที่ 1: เริ่มต้นจากข้อมูลต้นฉบับ ซึ่งเป็นชุดตัวเลขที่ยังไม่ผ่านการจัดเรียง กำแพงหรือดรรชนีอยู่ที่ตำแหน่งสมาชิกลำดับที่ 2 ด้วยการเปรียบเทียบค่าตัวเลขช่องที่1 และช่องที่ 2 ผลปรากฏว่าช่องที่ 2 คือค่าตัวเลข 78 ซึ่งมีค่ามากกว่า 23 จึงถือว่าเรียงลำดับอยู่แล้ว ดังนั้นก็ให้ขยับกำแพงหรือดรรชนีไปอีกหนึ่งตำแหน่ง 23 78 45 8 32 56 23 78 45 8 32 56 Sort Unsorted Unsorted วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  24. ขั้นตอนที่ 2: ตำแหน่งดรรชนี ณ ขณะนี้ขยับไปอยู่หน้าช่องที่ 3ให้ทำการนำค่าตัวเลขจากช่องที่ 3 ไป เปรียบเทียบกับชุดตัวเลขในส่วนที่จัดเรียงไว้แล้ว ซึ่งอยู่ส่วนหน้า ผลลัพธ์ที่ได้คือค่าตัวเลข 45 จะนำไปแทรกในตำแหน่งที่ 2 ซึ่งอยู่ระหว่างค่า 23 กับ 78 23 78 45 8 32 56 23 45 78 8 32 56 Sort Unsorted Sort Unsorted วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  25. ขั้นตอนที่ 3: ตำแหน่งดรรชนี ณ ขณะนี้ขยับไปอยู่หน้าช่องที่ 4 ให้ทำการนำค่าตัวเลขจากช่องที่ 4 ไป เปรียบเทียบกับชุดตัวเลขในส่วนที่จัดเรียงไว้แล้วทั้งหมด ค่า 8 จะถูกแทรกไว้ที่ตำแหน่งแรกในส่วนของข้อมูลที่ได้จัดเรียง 23 45 78 8 32 56 8 23 45 78 32 56 Sort Unsorted Sort Unsorted วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  26. ขั้นตอนที่ 4: ตำแหน่งถัดไปคือช่องที่ 5 ให้นำค่าตัวเลขจากช่องที่ 5 ซึ่งในที่นี้คือค่า 32 ไปเปรียบเทียบกับชุดตัวเลขในส่วนที่จัดเรียงทั้งหมด ผลปรากฏว่าค่า 32 ซึ่งอยู่ตำแหน่งที่ 5 นี้จะนำไปแทรกไว้ที่ตำแหน่งในส่วนที่ได้จัดเรียงไว้โดยแทรกไว้หน้าค่า 45 8 23 45 78 32 56 8 23 32 45 78 56 Sort Unsorted Sort วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  27. ขั้นตอนที่ 5: รอบนี้จัดเป็นรอบสุดท้าย โดยขณะนี้เหลือเพียงข้อมูลตำแหน่งสุดท้ายเพียงตัวเดียวที่จะต้องนำไปเปรียบเทียบเพื่อจัดเรียง ผลปรากฏว่า ค่าตัวเลข 56 จะถูกนำไปแทรกไว้ในตำแหน่งที่ 5 หลังจากนั้นจะได้ชุดตัวเลขที่ผ่านการจัดเรียงแล้วอย่างสมบูรณ์ 8 23 32 45 78 56 8 23 32 45 56 78 Sort Sort วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  28. Algorithm insertionSort (list, last) Sorts list array using insertion sort. The array is divided into sorted and unsortsd lists. With each pass, the first element in the unsorted list is inserted into the sorted list. Pre list must contain at least one item last is an index to last element in the list Post list has been rearranged 1 set current to 1 2 loop (until last element sorted) 1 move current element to hold 2 set walker to current - 1 3 loop (walker >= 0 AND hold key < walker key) 1 move walker element right one element 2 decrement walker 4 end loop 5 move hold to walker + 1 element 6 increment current 3 end loop end insertionSort อัลกอริทึมที่ 9.3Insertion Sort วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  29. การเรียงลำดับข้อมูลแบบ Bubble Sort การเรียงลำดับข้อมูลแบบ Bubble Sort เป็นการเรียงลำดับข้อมูลด้วยการเปรียบเทียบข้อมูลเป็นคู่ที่อยู่ติดกันในแต่ละรอบการทำงาน เพื่อสลับตำแหน่งกันหากข้อมูลอยู่ผิดลำดับ โดยหากเป็นการจัดเรียงลำดับข้อมูลจากน้อยไปมาก การทำงานจะเริ่มจากข้อมูลตัวสุดท้ายภายในลิสต์ และทำการเปรียบเทียบกับค่าถัดไปที่อยู่ข้างหน้าที่อยู่ติดกัน โดยหากตัวเลขที่อยู่ท้ายมีค่าน้อยกว่า ก็จะทำการสลับตำแหน่ง (Swap) กับตัวก่อนหน้าเพื่อขยับลอยเหนือขึ้นไปเรื่อยๆ จนกว่าข้อมูลในลิสต์จะถูกจัดเรียงทั้งหมด วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  30. Bubble up Wall … … 0 j k Last Sorted Unsorted รูปที่ 9.7 หลักการเรียงลำดับข้อมูลแบบ Bubble Sort วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  31. Ex. การเรียงข้อมูลแบบ Bubble Sort โดยการใช้หลักเกณฑ์จากรูปที่ 9.7 โดยสมมุติว่ามีข้อมูลที่ต้องการจัดเรียงดังนี้{23, 78, 45, 8, 56, 32} รอบที่ 1: 23 78 45 8 56 32 23 78 45 8 32 56 23 78 45 8 32 56 23 78 8 45 32 56 23 8 78 45 32 56 8 23 78 45 32 56 Unsorted วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  32. รอบที่ 2: 8 23 78 45 32 56 8 23 78 45 32 56 8 23 78 32 45 56 8 23 32 78 32 56 8 23 32 45 32 56 Sorted Unsorted วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  33. รอบที่ 3: รอบที่ 4: 8 23 32 78 45 56 8 23 32 45 78 56 8 23 32 45 78 56 8 23 32 45 56 78 8 23 32 45 78 56 8 23 32 45 56 78 8 23 32 78 32 56 8 23 32 45 56 78 Sorted Unsorted Sorted วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  34. Algorithm bubbleSort (list, 'last) Sort an array using* .bubble sort. Adjacent elements, are compared gad exchanged until list is completely ordered. pre list mast contain at least one item last contains index to last element in the list Post list has been rearranged in sequence low to high 1 set current to 0 2 set sorted to false 3 loop (current <= last AMD sorted false) Each iteration is one sort pass. 1 set walker to last 2 set sorted to true 3 loop (walker > current) 1 if (walker data < walker - 1 data) Any exchange means list is not sorted. 1 set sorted to false 2 exchange- (list, walker, walker - 1} 2 end if 3 decrement walker 4 end loop 5 increment current ' 4 end loop end bubbleSort อัลกอริทึมที่ 9.4Bubble Sort วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  35. การเรียงลำดับข้อมูลแบบ Quick Sort การเรียงลำดับข้อมูลแบบ Quick Sort เป็นการเรียงลำดับข้อมูลด้วยการใช้หลักการแบ่งส่วน (Partition) ข้อมูลเป็นหลัก แต่ละรอบของการทำงานจะมีการเลือกอิลิเมนต์ตัวหนึ่งที่เรียกว่า Pivot ที่ใช้สำหรับเป็นตัวแบ่งแยกส่วนข้อมูล ซึ่งแต่ละส่วนนั้นอาจจะมีจำนวน อิลิเมนต์ที่ไม่เท่ากันก็ได้ โดยการแบ่งส่วนภายในลิสต์ จะแบ่งออกเป็น 3 ส่วนด้วยกัน ซึ่งมีประสิทธิภาพมากกว่า เพราะมีจำนวนการสลับตำแหน่งจะน้อยกว่าการจัดเรียงลำดับแบบ Bubble Sort วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  36. After 1st partition 1. ส่วนที่หนึ่ง คือกลุ่มอิลิเมนต์ที่สมาชิกข้อมูลมีค่าน้อยกว่า pivot key 2. ส่วนที่สอง คือค่า pivot key ที่ใช้เป็นค่าสำหรับแยกส่วนข้อมูล ซึ่งปกติแล้วตำแหน่งที่เหมาะสมของค่านี้จะอยู่ระหว่างลิสต์ที่มีค่าน้อยกว่า pivot key กับลิสต์ที่มีค่ามากกว่าหรือเท่ากับค่า pivot key 3. ส่วนที่สาม คือกลุ่มอิลิเมนต์ที่สมาชิกข้อมูลมีค่ามากกว่าหรือเท่ากับค่าของ pivot key keys < pivot pivot keys >= pivot After 2nd partition < pivot pivot >= pivot After 3rd partition <--- Sorted --> After 4th partition <-------- Sorted --------> After 5th partition <-------- Sorted --------> < pivot pivot >= pivot After 6th partition <------------- Sorted ----------------> After 7th partition <------------------- Sorted ------------------> รูปที่ 9.8 แสดงการแบ่งส่วนข้อมูลการเรียงลำดับข้อมูลแบบ Quick Sort วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  37. สำหรับอัลกอริทึมต้นแบบของการเรียงลำดับข้อมูลแบบ Quick Sort ที่พัฒนาโดย Hoare นั้น ได้มีการเลือก Pivot Key ที่ตำแหน่ง อิลิเมนต์แรกของลิสต์ ต่อมาในราวปี ค.ศ. 1969, R.C. Singleton ได้ทำการปรับปรุงลำดับการเลือกค่า Pivot Key จากค่ากลาง (median value) ซึ่งประกอบด้วย 3 อิลิเมนต์ด้วยกัน คืออิลิเมนต์ฝั่งซ้าย (Left) อิลิเมนต์ฝั่งขวา (Right) และอิลิเมนต์ที่อยู่ตรงกลางของลิสต์ การกำหนดค่ากลางภายในลิสต์จึงต้องเป็นไปตามรูปแบบดังนี้ Left element <= middle element <= right element วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  38. Algorithm medianLeft {sortData, left, right) Find the median value of an array and place it in the first(left) location. Pre sortData is an array of at least three elements left and right are the boundaries of the array Post median value locate and place left RearrangesortData so median value is in middle location. 1 set mid to (left + right) /2 2 if (left key > mid key) 1 exchange (sortData, left, mid) 3 end if 4 if (left key > right key) l exchange (sortData, left, right) 5 end if 6 if {mid key > right key) 1 exchange (sortData, mid, right) 7 end if Median Is in middle location. Exchange with left. 8 exchange (sortData, left, mid) end medianLeft อัลกอริทึมที่ 9.5Median left วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  39. Ex. การเรียงข้อมูลแบบ Quick Sort โดยสมมุติว่ามีชุดตัวเลขที่ต้องการนำจัดเรียงดังนี้{78, 21, 14, 97, 87, 62, 74, 85, 76, 45, 84, 22} ดังนั้นตำแหน่งค่ากึงกลางในลิสต์จากสูตร set mid to (left + right) / 2 จากชุดลำดับที่ 1 อัลกอริทึมที่ 9.5 จะได้เท่ากับ (1 + 12)/2 ก็คือตำแหน่งที่ 6 ดังนั้นก็จะได้ Left Key = 78, Mid Key = 62 และ Right Key = 22 แต่ว่าทั้งสามอิลิเมนต์นั้นยังอยู่ในตำแหน่งที่ไม่ถูกต้อง จึงต้องดำเนินการเปรียบเทียบเงื่อนไขตามอัลกอริทึมที่ 9.5 เพื่อหาค่ากึ่งกลางที่ถูกต้องที่แสดงได้ดังต่อไปนี้ เมื่อได้ตำแหน่ง Left Key, Mid Key และ Right Key L M R 78 21 14 97 87 62 74 85 76 45 84 22 เปรียบเทียบค่า Left Key > Mid Key หรือไม่ ถ้าใช้ให้สลับตำแหน่ง 62 21 14 97 87 78 74 85 76 45 84 22 วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  40. เปรียบเทียบค่า Left Key > Right Key หรือไม่ ถ้าใช้ให้สลับตำแหน่ง 22 21 14 97 87 78 74 85 76 45 84 62 เปรียบเทียบค่า Mid Key > Right Key หรือไม่ ถ้าใช้ให้สลับตำแหน่ง 22 21 14 97 87 62 74 85 76 45 84 78 ณ ขณะนี้ได้เป็นไปตามรูปแบบแล้วคือ Left element <= middle element <= right element ซึ่งก็คือ 22 <= 62 <= 78 จากนั้นก็ดำเนินการย้ายตำแหน่ง Pivot Key ไปยังตำแหน่งแรกเพื่อถือครองไว้ก่อน จนกระทั่งได้จัดเรียงและแบ่งลิสต์ได้แล้ว จึงค่อยดำเนินการย้ายกลับมาในตำแหน่งที่ถูกต้องต่อไป วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  41. Pivot Key 62 21 14 97 87 22 74 85 76 45 84 78 sortLeft sortRight ให้สังเกตตัวชี้สองตัวซึ่งประกอบด้วย sortLeft และ sortRight ซึ่งถูกวางไว้ตำแหน่งต้นลิสต์และท้ายลิสต์ โดยตำแหน่ง sortLeft นั้นจะอยู่ถัดจาก Pivot Key ไปหนึ่งตำแหน่ง สำหรับเงื่อนไขของการดำเนินงานมีดังนี้คือ การเลื่อนตำแหน่งของ sortLeft และ sortRight > sortLeft จะเลื่อนไปทางขวาเรื่อยๆ เมื่อ sortLeft มีค่าน้อยกว่า Pivot Key > sortRight จะเลื่อนไปทางซ้ายเรื่อยๆ เมื่อ sortRight มีค่ามากกว่า Pivot Key ตัวชี้ทั้งสองจะหยุดเมื่อ >ค่าของ sortLeft มีค่ามากกว่า Pivot Key >ค่าของ sortRight มีค่าน้อยกว่า Pivot Key วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  42. โดยเมื่อเป็นไปตามเงื่อนไขข้างต้นแล้วให้ดำเนินการสลับตำแหน่งกัน Exchange 62 21 14 97 87 22 74 85 76 45 84 78 sortLeft sortRight หลังจากนั้นตัวชี้ทั้งสองก็เลื่อนไปเรื่อยๆ ซึ่งเป็นไปตามเงื่อนเช่นเดิม จนกระทั้งหยุดเลื่อนเมื่อตรงตามเงื่อนไข Exchange 62 21 14 45 87 22 74 85 76 97 84 78 sortLeft sortRight และเมื่อตัวชี้ sortLeft ได้เลื่อนมาถึงจุดส่วนทางกับตัวชี้ sortRight แล้ว ถือว่าสิ้นสุดการดำเนินการแล้ว จากนั้นย้ายตำแหน่งท้ายลิสต์ฝั่งซ้ายที่เคยเป็นตำแหน่งของ Pivot Key ซึ่งก็คือ 22 กลับไว้ตำแหน่งตามเดิม และย้ายตำแหน่งของ Pivot Key กลับมายังตำแหน่งที่ถูกต้อง วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  43. Move 62 21 14 45 22 87 74 85 76 97 84 78 sortRight sortLeft และท้ายสุดก็จะได้ลิสต์ที่ถูกแบ่งออกเป็นสองส่วนด้วยตัวแบ่ง Pivot โดยลิสต์ส่วนแรกจะมีค่าน้อยกว่า Pivot และลิสต์ส่วนที่สองจะมีค่ามากกว่าหรือเท่ากับค่า Pivot ซึ่งถือว่าแบ่งส่วนสำเร็จแล้วในรอบแรก 22 21 14 45 62 87 74 85 76 97 84 78 < pivot pivot >= pivot หลังจากที่ได้นำตำแหน่ง Pivot Key ไปไว้ในตำแหน่งที่ถูกต้องแล้ว ขั้นตอนต่อไปก็คือการใช้เทคนิคการเรียกตัวเอง (Recursive) ด้วยการเรียกใช้งานฟังก์ชัน Quick Sort เพื่อจัดการแบ่งส่วนข้อมูลในรูปแบบเดิมและการจัดเรียงข้อมูลจนเสร็จสมบูรณ์ ดังรูปที่ 9.9 วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  44. 78 21 14 97 87 62 74 85 76 45 84 22 62 22 21 14 45 87 74 85 76 97 84 78 22 78 14 21 45 76 74 87 97 84 87 14 45 74 87 21 76 84 85 97 21 76 84 97 85 รูปที่ 9.9 แสดงการแบ่งส่วนข้อมูลการเรียงลำดับข้อมูลแบบ Quick Sort ซึ่งใช้เทคนิค Recursive 85 วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  45. Algorithm quicksort (list, left, right) An array, list, is sorted using recursion. Pre list is an array of data to be sorted left and right identify the first and last elements of the list, respectively Post list is sorted 1 if ({right - left) > minSize) Quick sort 1 raedianLeft (list, left, right) 2 set pivot to left element 3 set sortLeft to left + l 4 set sortRight to right 5 loop (sortLeft <= sortRight) Find key on left that belongs on right 1 loop {sortLeft key < pivot key) l decrement sortRight 2 end loop Find key on right that belongs on left 3 loop (sortRight key >= pivot key) 1 decrement sortRight 4 end loop 5 if (sortLeft <«* sortRight) 1 exchange(list, sortLeft, sortRight) 2 increment sortLeft 3 decrement sortRight 6 end if 6 end loop Prepare for next pass 7 move sortLeft - 1 element to left element 8 move pivot element to sortLeft - 1 element 9 if (left < sortRight) 1 quicksort (list, left, sortRight -1) 10 end if 11 if (sortLeft < right) 1 quicksort (list, sortLeft, right) 12 end if 2 else 1 insertionSort (list, left, right) 3 end if end quicksort อัลกอริทึมที่ 9.6Quick Sort วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  46. การเรียงลำดับข้อมูลแบบ Merge Sort การเรียงลำดับข้อมูลแบบ Merge Sort เป็นการเรียงลำดับข้อมูลแบบภายนอก หรือการเรียงลำดับข้อมูลแบบผสาน มักจะนำไปใช้งานกับข้อมูลที่มีปริมาณมากๆ กล่าวคือข้อมูลทั้งหมดนั้น ไม่สามารถนำไปประมวลผลที่หน่วยความจำหลักในคราวเดียว ดังนั้นจึงต้องจึงต้องมีการนำข้อมูลบางส่วนไปประมวลผลในหน่วยความจำหลัก ในขณะที่ข้อมูลส่วนที่เหลือก็จะถูกจัดเก็บไว้ในหน่วยความจำสำรอง จากรูปที่ 9.10 แสดงถึงการแบ่งไฟล์ขนาดใหญ่เพื่อนำไปจัดเรียงข้อมูลแบบ Merge Sort หลังเสร็จสิ้นระยะการจัดเรียงข้อมูล จะได้ไฟล์ 2 ไฟล์ที่ผ่านการจัดเรียงข้อมูลเพื่อนำไปผสานรวมกัน วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  47. Input file 2,300 recodes Sort Merge 1 Merge 2 1-500 1001-1500 2001-2300 501-1000 1501-2000 รูปที่ 9.10 ระยะของการจัดเรียงข้อมูลด้วยวิธีการเรียงเรียงข้อมูลแบบ Merge Sort วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  48. การดำเนินงานพื้นฐานของการเรียงลำดับข้อมูลแบบ Merge Sort นั้น เป็นกระบวนการนำไฟล์ข้อมูลสองไฟล์ที่จัดเรียงแล้วมารวมกันเพื่อจัดเรียงข้อมูลตามคีย์ที่จัดเรียง กล่าวคือ เป็นการอ่านข้อมูลจาก File-1 และ File-2 และนำมาผสานรวมกัน ด้วยการเก็บเอาต์พุตไว้ที่ File-3 ซึ่งดังรูปที่ 9.10 File-1 File-2 1 3 5 4 5 6 8 10 File-3 1 2 3 4 5 6 8 10 รูปที่ 9.10 แสดงการอ่านไฟล์ทั้งสองและนำมาผสานรวมกันเป็นไฟล์เดียว วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  49. Algorithm mergeFiles Merge two sorted files into one file, Pre input files are sorted Post input files sequentially combined in output file 1 open files 2 read (file1 into recordl) 3 read (file2 into record2) 4 loop (not end filel OR not end file2) 1 if (recordl key <= record2 key) 1 write (recordl to file3) 2 read (file into recordl} 3 if (end of file1) 1 set recordl key to infinity 4 end if 2 else 1 write (record2 to file3) 2 read (file2 into record2) 3 if (end of file2) 1 set record2 key to infinity 4 end if 3 end if 5 end loop 6 close files end mergeFiles อัลกอริทึมที่ 9.7Merge Sort วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

  50. Ex. การเรียงข้อมูลแบบ Merge Sort โดยสมมุติว่ามีชุดตัวเลขที่ต้องการนำจัดเรียงดังนี้{1, 5, 3, 14, 17, 6, 7, 13} 1 5 3 14 17 6 7 13 Distribution Phase 1 5 3 14 17 6 7 13 1 5 3 14 17 6 7 13 1 5 3 14 17 6 7 13 1 5 3 14 6 17 7 13 1 3 5 14 6 7 13 17 1 3 5 6 7 13 14 17 รูปที่ 9.11 แสดงการเรียงลำดับข้อมูลแบบ Merge Sort วิชาโครงสร้างข้อมูล (Data Structure) รหัส 4122202

More Related