การจัดเรียงข้อมูล Sorting Internal Sorting External Sorting
Sorting การเรียงลำดับข้อมูล ทำให้ผู้ต้องการใช้ข้อมูลสามารถทำความเข้าใจกับข้อมูลหรือค้นหาได้ง่ายและเร็วขึ้นโดยอาจจะเรียงจากน้อยไปหามาก Ascending หรือ มากไปหาน้อย Descending สามารถแบ่งออกเป็น 2 ประเภท คือ Internal Sorting เก็บไว้ในหน่วยความจำหลัก External Sorting เก็บไว้ในหน่วยความจำสำรอง
Sorting Type **Selecting Sort **Insertion Sort or Linear Insertion Sort **Bubble Sort **Shell Sort **Bucket Sort or Radix Sort **Quick Sort **Heap Sort or Tree Sort
Selection Sort เป็นวิธีที่ง่ายที่สุดในการเรียงลำดับ โดยเริ่มจากหา ตำแหน่งของข้อมูลที่มีค่าน้อยที่สุดสลับตำแหน่งข้อมูล ใช้วิธีการเคลื่อนย้าย Address Node 40 30 10 50 79 90 60 95 26 85 A(1) A(3) 40 30 50 79 90 60 95 26 85 A(2) A(9) 26 40 30 50 79 90 60 95 85 A(3) A(4) 10 26 30 40 50 79 90 60 95 85
Insertion Sort or Linear Insertion Sort Selection Sort A(6) A(8) 10 26 30 40 50 60 79 90 95 85 A(8) A(10) 10 26 30 40 50 60 79 85 90 95 Insertion Sort or Linear Insertion Sort อ่านข้อมูลที่ต้องการเรียงลำดับเข้ามาทีละตัวโดย เริ่มจากตัวแรกก่อน และหาตำแหน่งของข้อมูลที่ว่างแล้ว แทรกข้อมูลตัวที่หนึ่งลงไป
Insertion Sort or Linear Insertion Sort 5 1 2 8 9 5 1 1 1 1 1 5 2 2 2 2 2 5 5 5 8 8 8 8 8 9 9 9 9 9 ต้องเพิ่มเนื้อที่ความจำเพิ่ม อีก N ตำแหน่ง สำหรับ ส่วนที่เรียงแล้ว A(1:N) ยังไม่ได้เรียงต้องใช้ B(1:N) มาช่วย โดยดึงแต่ ละค่าของ A ไปใส่
Bubble Sort เป็นการจัดเรียงโดยการเปรียบเทียบข้อมูลที่อยู่ใน ตำแหน่งที่ติดกัน ถ้าข้อมูลไม่อยู่ในลำดับที่ถูกต้องก็จะทำการสลับตำแหน่งของข้อมูลที่เปรียบเทียบ เริ่มจาก A(1) เปรียบเทียบกับ A(2) ก่อนแล้วทำต่อไปเรื่อย ๆ โดยสามารถจัดเรียงได้ทั้งจากมากไปหาน้อยและ น้อยไปหามาก
Bubble Sort 5 5 5 5 5 5 8 1 1 2 2 2 8 5 2 2 1 1 8 2 2 8 8 8 8 1 1 1 Shell Sort คล้ายกับ Bubble Sort จะมีการแบ่งข้อมูลออกเป็นกลุ่ม โดยใช้สูตรในการคำนวณคือ Ds = D s-1 2
Shell Sort 40 30 10 50 70 90 60 95 26 85 Ds = 10 = 5 2 (40,90) (30,60) (10,95) (50,26) (70,85) Ds = 5 = 3 2 (40,60,50, 85) (90,10,26) (30,95,70) Ds = 3 = 2 2 (40,50,90,26,95) (60,85,10,30,70) Ds = 2 = 1 2
Radix Sort or Bucket Sort Shell Sort (40 , 50 , 90 , 26 , 95 , 60 , 85 , 10 , 30 , 70) แล้วทำการจัดเรียงตามวิธีของ Bubble Sort 10 26 30 40 50 60 70 85 90 95 Radix Sort or Bucket Sort เป็นการพิจารณาจากค่าข้อมูลออกเป็นทีละหลัก โดยรอบแรกจะพิจารณาหลักสุดท้ายก่อน (หลักหน่วย) รอบต่อไปเป็นหลักสิบวนจนครบหลักของข้อมูล
Radix Sort or Bucket Sort 12 27 9 14 35 76 37 68 5 90 42 70 55 บักเก็ต หลักหน่วย บักเก็ต หลักหน่วย 0 90 70 5 35 5 55 1 81 6 76 2 12 82 42 7 27 37 3 8 68 4 14 9 9
Radix Sort or Bucket Sort ผลการจัดแรกเรียงรอบแรก 70 81 12 82 42 14 35 5 55 76 27 37 68 9 บักเก็ต หลักสิบ บักเก็ต หลักสิบ 0 05 09 5 55 1 12 14 6 68 2 27 7 70 76 3 35 37 8 81 82 4 42 9 90
Radix Sort or Bucket Sort ผลลัพธ์พิจารณาจากหลักสิบ 9 12 14 27 35 37 42 55 68 70 76 81 82 90 Quick Sort เป็นวิธีการจัดเรียงที่ใช้เวลาน้อยที่สุด เหมาะ กับข้อมูลปริมาณมาก ๆ โดยการเลือก Key ขึ้น มาหนึ่งค่าแล้วทำการดึงข้อมูลขึ้นมา
Heap Sort เป็นการเรียงโดยใช้วิธี Binary Tree มีเงื่อนไขว่าโหนดที่เป็นลูกจะต้องมีค่าน้อยกว่าหรือเท่ากับค่าของโหนดที่เป็นพ่อ ตัวข้อมูล 42 23 74 11 65 58 94 36 นำค่าแรกมาเป็นโหนดที่ 1 หรือ Root 42 นำโหนดที่ 2 (23) เข้ามาเปรียบเทียบกับโหนดพ่อ พิจารณาแล้วมีค่าน้อยกว่าจึงอยู่ด้านซ้าย
Heap Sort 42 23 นำค่าโหนด 3 (74) มาเทียบกับโหนดพ่อมีค่ามาก กว่าโหนดพ่อซึ่งเท่ากับ 42 จึงทำการสลับ 74 23 42 นำค่าโหนด 4 (11) มาเปรียบเทียบกับโหนดพ่อ
Heap Sort นำค่าโหนด 5 (65) มาเทียบโหนดพ่อ (23) แต่โหนด 5 74 42 23 11 นำค่าโหนด 5 (65) มาเทียบโหนดพ่อ (23) แต่โหนด 5 มีค่ามากกว่าพ่อจึงสลับ 74 65 42 11 23
Heap Sort นำโหนด 6 (58) เทียบกับโหนดพ่อปรากฏว่าโหนด นำโหนด 6 (58) เทียบกับโหนดพ่อปรากฏว่าโหนด 6 มีค่ามากกว่าโหนดพ่อจึงสลับ 74 58 65 11 23 42
Heap Sort นำโหนด 7 (94) เทียบกับโหนดพ่อปรากฏว่ามากกว่า โหนดพ่อจึงสลับ แล้ว 58 ยังมากกว่าโหนดพ่อคือ 74 จึง สลับต่อไปจนถึง Root เพราะ 94 มากกว่า Root จึงสลับกัน 94 65 74 11 23 42 58
Heap Sort นำโหนด 8 (36) เทียบกับโหนดพ่อ ปรากฏว่า 36 มากว่าโหนดพ่อจึงสลับ 94 65 74 36 23 42 58 11 จากนั้นให้ค่า Address Node แล้วทำการสลับตำแหน่ง แบบ Selection Sort
Heap Sort เมื่อผ่านวิธีการแล้วจะได้ค่า 11 23 36 42 58 65 74 94 11 23 36 42 58 65 74 94