ในโลกปัจจุบันที่ข้อมูลมีปริมาณมหาศาลและความต้องการในการจัดเรียงข้อมูลที่รวดเร็วยิ่งเพิ่มขึ้น, Quick Sort คือหนึ่งในอัลกอริทึมที่เข้ามามีบทบาทสำคัญในการจัดการข้อมูลนี้. หากเรายังใหม่ต่อโลกของการเขียนโปรแกรม, เรามาทำความรู้จักกับ Quick Sort ในภาษา Golang กันเถอะ!
Quick Sort เป็นอัลกอริทึมการเรียงลำดับแบบ “divide and conquer” ซึ่งคิดค้นโดย C. A. R. Hoare ในปี 1960. สาระสำคัญของอัลกอริทึมนี้คือการเลือก "pivot" หนึ่งตัว แล้วจัดเรียงข้อมูลภายในอาร์เรย์ให้ส่วนหนึ่งมีแต่ข้อมูลที่น้อยกว่า pivot และอีกส่วนหนึ่งมีแต่ข้อมูลที่มากกว่าหรือเท่ากับ pivot. จากนั้นจึงจัดเรียงสองส่วนย่อยนี้แบบเดียวกันโดยใช้ recursion.
ก่อนอื่นมาดูตัวอย่างการเขียน Quick Sort ด้วยภาษา Golang:
package main
import (
"fmt"
)
func quickSort(arr []int) []int {
if len(arr) < 2 {
return arr
}
left, right := 0, len(arr)-1
pivot := arr[rand.Int() % len(arr)] // เลือก pivot แบบสุ่มจากอาร์เรย์
for left <= right {
for arr[left] < pivot {
left++
}
for arr[right] > pivot {
right--
}
if left <= right {
arr[left], arr[right] = arr[right], arr[left]
left++
right--
}
}
return append(quickSort(arr[:left]), quickSort(arr[left:])...)
}
func main() {
arr := []int{3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5}
fmt.Println("Original array:", arr)
sortedArr := quickSort(arr)
fmt.Println("Sorted array:", sortedArr)
}
ในโค้ดข้างต้น, เรามีฟังก์ชัน `quickSort` ที่รับพารามิเตอร์เป็นสไลซ์ของจำนวนเต็ม(`[]int`). ความยากง่ายของการเลือก pivot สามารถส่งผลให้ประสิทธิภาพของการจัดเรียงแตกต่างกันออกไป. ในโค้ดข้างต้น, เราโชคดีที่ Golang มีฟังก์ชันตัวเลขสุ่มในแพ็กเกจ `math/rand` ช่วยให้เราเลือก pivot ได้อย่างง่ายดาย.
Quick Sort มีประโยชน์มากในโลกจริง เช่น ในการจัดเรียงข้อมูลบนฐานข้อมูลใหญ่ๆ, การทำให้ข้อมูลถูกเรียงลำดับก่อนนำไปประมวลผลในการวิเคราะห์ทางสถิติ, หรือแม้แต่ในการจัดเรียงผลการค้นหาของ search engine เพื่อนำเสนอผลลัพธ์ที่เกี่ยวข้องมากที่สุดให้กับผู้ใช้งาน.
- Average Case: O(n log n)
- Worst Case: O(n^2) (เกิดขึ้นเมื่อ pivot เลือกได้ไม่ดีทำให้การแบ่งอาร์เรย์เป็นสองส่วนไม่มีประสิทธิภาพ)
- ข้อดี:- มีประสิทธิภาพสูงในการจัดเรียงข้อมูลที่ไม่ได้เรียงลำดับมาก่อน (average case)
- มีการใช้ Memory น้อยเพราะมีลักษณะเป็น in-place sort
- สามารถปรับใช้กับข้อมูลขนาดใหญ่ได้เป็นอย่างดี
- ข้อเสีย:- ใน worst case อาจจะไม่มีประสิทธิภาพที่สุด
- Quick Sort มีสถานการณ์ที่ unstable ซึ่งอาจทำให้ข้อมูลที่มีค่าเท่ากันเปลี่ยนตำแหน่งกันได้
การเรียนรู้และทำความเข้าใจ Quick Sort เป็นการพัฒนาทักษะการเขียนโปรแกรมที่ยอดเยี่ยม. หากคุณพบว่าการเรียนการเขียนโปรแกรมนั้นน่าตื่นเต้น, ในฐานะผู้เชี่ยวชาญด้านการเขียนโปรแกรมที่ EPT, ขอเชิญชวนให้คุณมาสร้างเส้นทางการเรียนรู้ของคุณกับเรา. ที่ EPT เรามีหลักสูตรที่หลากหลายพร้อมด้วยการฝึกปฏิบัติที่จะช่วยให้คุณเข้าใจถึงหลักการและประยุกต์ใช้อัลกอริทึมการเรียงลำดับล้ำยุคในโลกการเขียนโปรแกรมได้อย่างแท้จริง. สร้างโอกาสในการพัฒนาทักษะและความเป็นมืออาชีพในด้านโปรแกรมมิ่งไปกับเราที่ EPT สถาบันฝึกหัดที่จะเป็นบันไดขั้นต่อไปของคุณในอาชีพนี้.
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
Tag ที่น่าสนใจ: quick_sort golang algorithm divide_and_conquer programming sorting recursive complexity_analysis memory_efficiency randomized_algorithm
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM