Selection Sort คือ?

Selection Sort คือ?

Selection Sort คือ?

การเรียงลำดับแบบเลือก เป็นอัลกอริทึมการจัดเรียงที่ง่ายและมีประสิทธิภาพ ซึ่งทำงานโดยการเลือกค่าที่น้อยที่สุด (หรือมากที่สุด) ในแต่ละรอบ แล้วสลับค่าที่เลือกมาต่อท้ายของส่วนที่เรียงแล้ว

Selection Sort ทำงานอย่างไร?

ตัวอย่าง: 64 25 12 22 11 ให้เรียงจากน้อยไปมาก
รอบที่ 1: เริ่มต้นด้วยการหาค่าที่น้อยที่สุด ตั้งแต่ index ที่ 0 ถึง 4 ตามลำดับ จะเห็นได้ว่า 11 เป็นค่าน้อยที่สุด ดังนั้นจึงต้องสลับตำแหน่งของ 11 ไปเก็บไว้ที่ index 0

64 25 12 22 11 -> 11 25 12 22 64

รอบที่ 2: index 1 มี 25 อยู่ ให้หาค่าที่น้อยที่สุดของอาร์เรย์ที่เหลือ จะเห็นได้ว่า 12 เป็นค่าที่น้อยที่สุด ให้สลับตำแหน่งของ 12 ไปเก็บไว้ที่ index 1

11 25 12 22 64 -> 11 12 25 22 64

รอบที่ 3: index 2 มี 25 อยู่ ให้หาค่าที่น้อยที่สุดของอาร์เรย์ที่เหลือ จะเห็นได้ว่า 22 เป็นค่าที่น้อยที่สุด ให้สลับตำแหน่งของ 22 ไปเก็บไว้ที่ index 2

11 12 25 22 64 -> 11 12 22 25 64

รอบที่ 4: index 3 มี 25 อยู่ ให้หาค่าที่น้อยที่สุดของอาร์เรย์ที่เหลือ จะเห็นได้ว่า 25 เป็นค่าที่น้อยที่สุด และอยู่ในตำแหน่งที่ถูกต้องแล้ว จึงไม่มีการสลับตำแหน่ง

11 12 22 25 64 -> 11 12 22 25 64

ส่วนค่าที่มากที่สุดจะถูกวางไว้ที่ตำแหน่งสุดท้ายโดยอัตโนมัติ ดังนั้นเราจะได้อาร์เรย์ที่ถูกจัดเรียงแล้วดังนี้ 11 12 22 25 64

ตัวอย่างโค้ด Selection Sort

#include <iostream>
using namespace std;

void selectionSort(int arr[], int n){
	for (int i = 0; i < n-1; i++)
	{
		int min_idx = i;
		for (int j = i+1; j < n; j++)
		{
		if (arr[j] < arr[min_idx])
			min_idx = j;
		}
		if (min_idx!=i)
			swap(arr[min_idx],arr[i]);
	}
}

void printArray(int arr[], int size){
	for (int i=0; i < size; i++)
	{
	cout << arr[i] << " ";
	}
}

int main(){
	int arr[] = {64, 25, 12, 22, 11};
	int n = sizeof(arr)/sizeof(arr[0]);
	selectionSort(arr, n);
	cout << "Sorted array: ";
	printArray(arr, n);
	return 0;
}

ผลลัพธ์:
Sorted array: 11 12 22 25 64

Time Complexity: O(N2)