Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

โปรแกรม Java Stooge Sort (อัลกอริทึมจัดเรียงแบบ Recursive)

Stooge Sort คืออะไร?

O(n^(log 3 / log 1.5)) ≈ O(n^2.7095) - ช้ามาก ใช้เพื่อการศึกษา/ความสนุก ไม่ใช้งานจริง

หลักการ: เรียง 2/3 ส่วนแรก → 2/3 ส่วนหลัง → 2/3 ส่วนแรกอีกครั้ง

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


public class Demo {
    static void stoogeSort(int[] arr, int l, int h) {
        if (l >= h) return;
        
        // Swap ถ้าตัวแรก > ตัวสุดท้าย
        if (arr[l] > arr[h]) {
            int temp = arr[l];
            arr[l] = arr[h];
            arr[h] = temp;
        }
        
        // ถ้ามากกว่า 2 elements เรียง recursive
        if (h - l + 1 > 2) {
            int t = (h - l + 1) / 3;
            stoogeSort(arr, l, h - t);      // 2/3 ส่วนแรก
            stoogeSort(arr, l + t, h);      // 2/3 ส่วนหลัง
            stoogeSort(arr, l, h - t);      // 2/3 ส่วนแรกอีกครั้ง
        }
    }
    
    public static void main(String[] args) {
        int[] arr = {12, 34, 67, 91, 11, 0, 89, 102, 39};
        System.out.println("Original: " + Arrays.toString(arr));
        
        stoogeSort(arr, 0, arr.length - 1);
        
        System.out.println("Sorted:   " + Arrays.toString(arr));
    }
}

ผลลัพธ์

Original: [12, 34, 67, 91, 11, 0, 89, 102, 39]
Sorted:   [0, 11, 12, 34, 39, 67, 89, 91, 102]

Complexity Analysis

  • Time: O(n^2.7095) - ช้ากว่า Bubble Sort (O(n²))!
  • Space: O(n) - recursion stack depth
  • Stable: ไม่ (swap ตัวแรก/สุดท้ายอาจเปลี่ยนลำดับ equal elements)

เปรียบเทียบ Sorting Algorithms

AlgorithmTime (Avg)Time (Worst)SpaceStable
Stooge SortO(n^2.71)O(n^2.71)O(n)No
Bubble SortO(n²)O(n²)O(1)Yes
Quick SortO(n log n)O(n²)O(log n)No
Merge SortO(n log n)O(n log n)O(n)Yes
Arrays.sort()O(n log n)O(n log n)O(log n)Yes (objects)

สรุป: Stooge Sort เป็นตัวอย่าง algorithm ที่ "ทำงานได้แต่ช้ามาก" ใช้สอน recursion และ complexity analysis