เมื่อพูดถึงการเรียงลำดับข้อมูลในวิทยาศาสตร์คอมพิวเตอร์ มีหลายวิธีที่นักพัฒนาทำให้ข้อมูลมีความเป็นระเบียบได้ หนึ่งในวิธีที่เรียบง่ายแต่มีประสิทธิภาพในบางสถานการณ์ก็คือ "Selection Sort" ซึ่งเป็นเทคนิคการเรียงลำดับข้อมูลพื้นฐานที่อาศัยการค้นหาสมาชิกที่เล็กหรือใหญ่ที่สุดและจัดเรียงข้อมูลหนึ่งขั้นตอนต่อครั้ง
#### อัลกอริทึมของ Selection Sort
อัลกอริทึมของ Selection Sort เริ่มต้นด้วยการค้นหาค่าที่เล็กที่สุด (หรือใหญ่ที่สุด กระจายไปที่ preference) ในส่วนที่ยังไม่ได้เรียงลำดับของ array แล้วสลับตำแหน่งของมันกับสมาชิกในตำแหน่งแรกของส่วนที่ยังไม่ได้เรียงลำดับนั้น จากนั้นจะทำขั้นตอนเหล่านี้ซ้ำเรื่อยๆจนกว่า array นั้นจะถูกเรียงลำดับอย่างสมบูรณ์
เราสามารถบอกว่า Selection Sort มี Complexity ในการทำงานเป็น O(n^2) เพราะว่าสำหรับข้อมูล n อันที่ต้องมีการเข้าถึงและเปรียบเทียบในระหว่างการทำงานทั้งหมด n(n-1)/2 ครั้ง ซึ่งมากขึ้นเมื่อ n เพิ่มขึ้น
#### ข้อดีของ Selection Sort
- เรียบง่ายและเข้าใจง่าย
- ใช้ Memory น้อย เพราะไม่ต้องใช้พื้นที่เพิ่มเติมในการเรียงลำดับ (In-place Sorting)
- การทำงานมีจำนวนการสลับ(swap)น้อย จึงเหมาะกับการเรียงข้อมูลที่มี Cost ของการเปลี่ยนตำแหน่งสูง
#### ข้อเสียของ Selection Sort
- ไม่ค่อยมีประสิทธิภาพกับข้อมูลปริมาณมาก
- มีเวลาทำงานที่คาดเดาได้ (Predictable Runtime) ซึ่งไม่เหมาะกับบาง Application ที่ต้องการประสิทธิภาพตอบสนองสูง
#### ตัวอย่างการใช้งาน Selection Sort โดยใช้ภาษา Perl
สมมติว่าเรามีอะเรย์เลข `@unsorted` ที่ไม่ได้เรียงลำดับและเราต้องการใช้ Selection Sort เพื่อเรียงลำดับเลขจากน้อยไปหามากเป็นลำดับขั้น:
#!/usr/bin/perl
use strict;
use warnings;
sub selection_sort {
my @arr = @_;
for my $i (0..$#arr-1) {
my $min_index = $i;
for my $j ($i+1..$#arr) {
if ($arr[$j] < $arr[$min_index]) {
$min_index = $j;
}
}
# Swap if the new minimum is found
if ($i != $min_index) {
@arr[$i, $min_index] = @arr[$min_index, $i];
}
}
return @arr;
}
my @unsorted = (64, 25, 12, 22, 11);
my @sorted = selection_sort(@unsorted);
print "Sorted array is: " . join(', ', @sorted) . "\n";
Output:
Sorted array is: 11, 12, 22, 25, 64
#### การใช้งานในชีวิตจริง (Usecase)
Selection Sort อาจไม่ค่อยได้รับความนิยมในการใช้งานจริงเนื่องจากประสิทธิภาพที่ไม่สูงโดยเฉพาะเมื่อเปรียบเทียบกับวิธีอื่นๆ เช่น Quick Sort หรือ Merge Sort อย่างไรก็ตามในระบบที่ Memory เป็นข้อจำกัดและค่าใช้จ่ายในการปรับตำแหน่งข้อมูลมีค่าสูงมาก (เช่นการเรียงลำดับบนเครื่องคำนวนที่มีขีดความสามารถ Memory จำกัดหรือการปรับตำแหน่งข้อมูลบน hardware) วิธีนี้ก็เป็นทางเลือกที่เหมาะสม
หากคุณเป็นผู้ที่แสวงหาความรู้เกี่ยวกับการเขียนโปรแกรมและมีความสนใจในอัลกอริทึมเบื้องต้น ที่ EPT (Expert-Programming-Tutor) เรามีหลักสูตรที่จะเปิดประตูสู่โลกของการเขียนโปรแกรมให้กับคุณ พบกับการเรียนรู้ที่สนุกสนานประกอบไปด้วยการฝึกฝนและตัวอย่างที่จะทำให้คุณเข้าใจการทำงานของอัลกอริทึมและการใช้งานในภาษาต่างๆ ได้อย่างง่ายดาย ร่วมเรียนรู้กับเราวันนี้ และนำความรู้ไปใช้งานได้อย่างมั่นใจและชำนาญ!
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
Tag ที่น่าสนใจ: selection_sort algorithm perl sorting complexity in-place_sorting programming memory_management swap predictable_runtime use_case expert_programming_tutor basic_algorithm programming_language array
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM