ก่อนอื่นเรามาทำความเข้าใจกับความสำคัญของเรื่องการเรียงลำดับ (Sorting) ในโลกของการเขียนโปรแกรมกันก่อนครับ การเรียงลำดับคือกระบวนการจัดเรียงข้อมูลตามลำดับที่กำหนด เช่น จากน้อยไปมาก หรือจากมากไปน้อย เป็นหลักการพื้นฐานที่มีความสำคัญมาก เนื่องจากช่วยให้การค้นหาหรือการวิเคราะห์ข้อมูลเป็นไปได้สะดวกและรวดเร็วขึ้น
ต่อไปนี้คือ 5 วิธีการเรียงลำดับที่นิยมใช้ในภาษา Python พร้อมด้วยตัวอย่างโค้ด
1. Bubble Sort: เป็นอัลกอริทึมการเรียงลำดับที่ง่ายที่สุด ทำงานโดยการเปรียบเทียบค่าต่างๆ บนลิสต์จากซ้ายไปขวา และสลับค่าถ้าค่าข้างหน้ามีขนาดใหญ่กว่าค่าข้างหลัง ทำซ้ำจนกว่าไม่เกิดการสลับอีก
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(0, n-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
arr = [64, 34, 25, 12, 22, 11, 90]
bubble_sort(arr)
print("Sorted array is:", arr)
2. Insertion Sort: เป็นการเรียงลำดับโดยการแยกลิสต์เป็นสองส่วน คือ ส่วนที่เรียงแล้วและส่วนที่ยังไม่เรียง และทำการย้ายสมาชิกจากส่วนที่ยังไม่เรียงไปยังส่วนที่เรียงแล้วตามลำดับ
def insertion_sort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i-1
while j >=0 and key < arr[j]:
arr[j + 1] = arr[j]
j -= 1
arr[j + 1] = key
arr = [12, 11, 13, 5, 6]
insertion_sort(arr)
print("Sorted array is:", arr)
3. Selection Sort: การเรียงลำดับโดยเลือกสมาชิกที่ยังไม่เรียงที่มีค่าน้อยที่สุดหรือมากที่สุดในแต่ละขั้นตอนมาวางไว้ที่ตำแหน่งที่ถูกต้อง
def selection_sort(arr):
for i in range(len(arr)):
min_idx = i
for j in range(i+1, len(arr)):
if arr[min_idx] > arr[j]:
min_idx = j
arr[i], arr[min_idx] = arr[min_idx], arr[i]
arr = [64, 25, 12, 22, 11]
selection_sort(arr)
print("Sorted array is:", arr)
4. Merge Sort: เป็นอัลกอริทึมการเรียงลำดับแบบจำแนกและผสาน โดยจะทำการแบ่งลิสต์เป็นส่วนๆ จนเหลือเพียงรายการเดียวแล้วจึงทำการผสานข้อมูลกลับเข้าด้วยกัน
def merge_sort(arr):
if len(arr) > 1:
mid = len(arr)//2
L = arr[:mid]
R = arr[mid:]
merge_sort(L)
merge_sort(R)
i = j = k = 0
while i < len(L) and j < len(R):
if L[i] < R[j]:
arr[k] = L[i]
i += 1
else:
arr[k] = R[j]
j += 1
k += 1
while i < len(L):
arr[k] = L[i]
i += 1
k += 1
while j < len(R):
arr[k] = R[j]
j += 1
k += 1
arr = [38, 27, 43, 3, 9, 82, 10]
merge_sort(arr)
print("Sorted array is:", arr)
5. Quick Sort: เป็นอัลกอริทึมการเรียงลำดับแบบหารเป็นส่วน โดยเลือก "หลัก" เพื่อทำการเรียงข้อมูลในลิสต์ให้ข้อมูลที่น้อยกว่าหลักอยู่ด้านหนึ่งและข้อมูลที่มีค่ามากกว่าอยู่อีกด้านหนึ่ง
def partition(arr, low, high):
i = (low-1)
pivot = arr[high]
for j in range(low, high):
if arr[j] <= pivot:
i = i+1
arr[i], arr[j] = arr[j], arr[i]
arr[i+1], arr[high] = arr[high], arr[i+1]
return (i+1)
def quick_sort(arr, low, high):
if len(arr) == 1:
return arr
if low < high:
pi = partition(arr, low, high)
quick_sort(arr, low, pi-1)
quick_sort(arr, pi+1, high)
arr = [10, 7, 8, 9, 1, 5]
n = len(arr)
quick_sort(arr, 0, n-1)
print("Sorted array is:", arr)
การเรียงลำดับมีความสำคัญในการเพิ่มประสิทธิภาพของการค้นหาและการประมวลผลข้อมูล การรู้วิธีการเรียงลำดับที่หลากหลายสามารถช่วยให้ผู้เขียนโปรแกรมเลือกใช้วิธีที่เหมาะสมที่สุดสำหรับโจทย์ปัญหาที่ต้องเผชิญ ทั้งหมดนี้คือแนวคิดพื้นฐานสำคัญที่คุณจะได้เรียนรู้และทำความเข้าใจอย่างลึกซึ้งผ่านหลักสูตรการเขียนโปรแกรมที่ Expert-Programming-Tutor (EPT) ซึ่งจะไม่เพียงแต่จำกัดอยู่แค่ทฤษฎี แต่ยังรวมถึงการปฏิบัติจริงด้วยโค้ดที่ใช้งานได้จริง และประยุกต์ใช้กับโปรเจ็คที่หลากหลาย เพื่อให้คุณพร้อมที่จะใช้ความรู้ที่ได้รับอย่างเต็มที่ในโลกแห่งการเขียนโปรแกรมที่แท้จริงครับ!
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
หากเจอข้อผิดพลาด หรือต้องการพูดคุย ติดต่อได้ที่ https://m.me/expert.Programming.Tutor/
Tag ที่น่าสนใจ: python sorting bubble_sort insertion_sort selection_sort merge_sort quick_sort algorithm programming data_structure
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM
Copyright (c) 2013 expert-programming-tutor.com. All rights reserved. | 085-350-7540 | 084-88-00-255 | ntprintf@gmail.com