Stalin Sort เป็นอัลกอริทึมสาย "Meme" ที่โด่งดังที่สุดในโลกอินเทอร์เน็ตครับ โดยชื่อของมันล้อเลียนแนวคิดของ Joseph Stalin ผู้นำสหภาพโซเวียตที่ขึ้นชื่อเรื่องการกำจัดคนที่ไม่เห็นด้วยออกไป
ในขณะที่อัลกอริทึมอื่นๆ พยายาม "จัดระเบียบ" ข้อมูลให้เข้าที่ Stalin Sort เลือกวิธีที่เด็ดขาดกว่านั้นคือ "ถ้าตัวไหนวางผิดที่ ก็ลบทิ้งไปซะ!"
💡 แนวคิดหลัก: การกำจัดจุดอ่อน (Elimination)
กฎของ Stalin Sort เรียบง่ายมากครับ:
- เดินตรวจแถวข้อมูลจากซ้ายไปขวา
- ถ้าเจอข้อมูลตัวไหนที่ "น้อยกว่า" ตัวก่อนหน้า (ซึ่งทำให้แถวไม่เรียงลำดับ)
- ส่งมันไปกูลัก (Gulag): คือลบข้อมูลตัวนั้นออกจาก Array ทันที!
- ผลลัพธ์ที่ได้คือ Array ที่เรียงลำดับจากน้อยไปมากแน่นอน (แต่ข้อมูลอาจจะหายไปเพียบ)
🛠 ขั้นตอนการทำงาน Step-by-Step
สมมติข้อมูลคือ [1, 2, 5, 3, 4, 7, 6]
- เริ่มที่
1 -> เก็บไว้
- ตรวจ
2 (2 > 1) -> เรียงถูก -> เก็บไว้
- ตรวจ
5 (5 > 2) -> เรียงถูก -> เก็บไว้
- ตรวจ
3 (3 < 5) -> ผิดระเบียบ! -> ลบ 3 ทิ้ง
- ตรวจ
4 (4 < 5) -> ผิดระเบียบ! -> ลบ 4 ทิ้ง
- ตรวจ
7 (7 > 5) -> เรียงถูก -> เก็บไว้
- ตรวจ
6 (6 < 7) -> ผิดระเบียบ! -> ลบ 6 ทิ้ง
ผลลัพธ์สุดท้าย: [1, 2, 5, 7]
💻 ตัวอย่าง Code (TypeScript) สำหรับ exsorted
export const stalinSort = <T>(arr: T[]): T[] => {
if (arr.length === 0) return [];
const result: T[] = [arr[0]];
for (let i = 1; i < arr.length; i++) {
// เก็บเฉพาะตัวที่มากกว่าหรือเท่ากับตัวล่าสุดใน result เท่านั้น
if (arr[i] >= result[result.length - 1]) {
result.push(arr[i]);
}
}
return result;
};
📊 วิเคราะห์ประสิทธิภาพ (Complexity)
-
Time Complexity: $O(n)$ (เร็วระดับปีศาจ เพราะตรวจรอบเดียวจบ!)
-
Space Complexity: $O(n)$ (สำหรับเก็บผลลัพธ์ใหม่)
-
Data Integrity: 0% (ข้อมูลของคุณอาจหายไปเกือบหมดถ้ามันไม่ได้เรียงมาตั้งแต่แรก)
Stalin Sort เป็นอัลกอริทึมสาย "Meme" ที่โด่งดังที่สุดในโลกอินเทอร์เน็ตครับ โดยชื่อของมันล้อเลียนแนวคิดของ Joseph Stalin ผู้นำสหภาพโซเวียตที่ขึ้นชื่อเรื่องการกำจัดคนที่ไม่เห็นด้วยออกไป
ในขณะที่อัลกอริทึมอื่นๆ พยายาม "จัดระเบียบ" ข้อมูลให้เข้าที่ Stalin Sort เลือกวิธีที่เด็ดขาดกว่านั้นคือ "ถ้าตัวไหนวางผิดที่ ก็ลบทิ้งไปซะ!"
💡 แนวคิดหลัก: การกำจัดจุดอ่อน (Elimination)
กฎของ Stalin Sort เรียบง่ายมากครับ:
🛠 ขั้นตอนการทำงาน Step-by-Step
สมมติข้อมูลคือ
[1, 2, 5, 3, 4, 7, 6]1-> เก็บไว้2(2 > 1) -> เรียงถูก -> เก็บไว้5(5 > 2) -> เรียงถูก -> เก็บไว้3(3 < 5) -> ผิดระเบียบ! -> ลบ3ทิ้ง4(4 < 5) -> ผิดระเบียบ! -> ลบ4ทิ้ง7(7 > 5) -> เรียงถูก -> เก็บไว้6(6 < 7) -> ผิดระเบียบ! -> ลบ6ทิ้งผลลัพธ์สุดท้าย:
[1, 2, 5, 7]💻 ตัวอย่าง Code (TypeScript) สำหรับ
exsorted📊 วิเคราะห์ประสิทธิภาพ (Complexity)