ใช้อัลกอริทึมการเรียงลำดับการนับใน Java

เผยแพร่แล้ว: 2023-01-30
ใช้อัลกอริทึมการเรียงลำดับการนับใน Java

อัลกอริทึมการเรียงลำดับการนับคืออะไร?

Counting sort อัลกอริทึมการเรียงลำดับที่มีประสิทธิภาพสำหรับ small ranges of integers ทำงานโดยการนับจำนวนครั้งที่เกิดขึ้นของแต่ละค่าในอาร์เรย์อินพุต จากนั้นใช้ข้อมูลนั้นเพื่อวางแต่ละค่าในตำแหน่งที่ถูกต้องในอาร์เรย์เอาต์พุต

ความซับซ้อนของเวลาของอัลกอริทึมนี้คือ O(n+k) โดยที่ n คือขนาดของอินพุตอาร์เรย์ และ k คือช่วงของจำนวนเต็ม

CrunchifyCountingSortAlgo.java

นี่คือการใช้งาน Counting Sort ใน Java อย่างสมบูรณ์ เพียงคัดลอกลงใน IDEA ที่คุณต้องการแล้วเรียกใช้

 แพ็คเกจ crunchify.com.java.tutorials;

นำเข้า java.util.Arrays;

/**
 * @ผู้เขียน Crunchify.com
 * โปรแกรม: วิธีการใช้อัลกอริทึมการเรียงลำดับการนับใน java?
 * Counting sort เป็นอัลกอริทึมการเรียงลำดับที่เรียงลำดับองค์ประกอบของอาร์เรย์ 
 * โดยการนับจำนวนการเกิดขึ้นของแต่ละองค์ประกอบที่ไม่ซ้ำกันในอาร์เรย์
 */

CrunchifyCountingSortAlgo คลาสสาธารณะ {

    โมฆะสาธารณะคงที่ main(String[] args) {

        // อาร์เรย์จำนวนเต็ม 10 องค์ประกอบ
        int[] crunchifyArray = {9, 3, 6, 6, 1, 12, 32, 29, 2, 9, 3};

        crunchifyPrint("อาร์เรย์ดั้งเดิม:" + Arrays.toString(crunchifyArray));
        crunchifyPrint ("\n");

        CrunchifyCountingSortAlgo crunchify = ใหม่ CrunchifyCountingSortAlgo();
        crunchify.crunchifyCountingSortAlgorithm (crunchifyArray);

        crunchifyPrint ("\n");
        crunchifyPrint("ผลลัพธ์ของอัลกอริทึมการเรียงลำดับการนับแบบ Crunchify:" + Arrays.toString(crunchifyArray));
    }

    โมฆะคงที่ส่วนตัว crunchifyPrint(String s) {

        System.out.println(s);
    }


    /**
     * ผู้แต่ง: App Shah (Crunchify.com)
     *
     * การนับลอจิกการเรียงลำดับ:
     * นี่คือการใช้งานการเรียงลำดับการนับ ซึ่งเป็นอัลกอริธึมการเรียงลำดับที่มีประสิทธิภาพสำหรับจำนวนเต็มช่วงเล็กๆ
     * ทำงานโดยการนับจำนวนครั้งที่เกิดขึ้นของแต่ละค่าในอาร์เรย์อินพุต
     * จากนั้นใช้ข้อมูลนั้นเพื่อวางแต่ละค่าในตำแหน่งที่ถูกต้องในอาร์เรย์เอาต์พุต
     * ความซับซ้อนของเวลาของอัลกอริทึมนี้คือ O(n+k)
     * โดยที่ n คือขนาดของอาร์เรย์อินพุต และ k คือช่วงของจำนวนเต็ม
     */


    int คงที่สาธารณะ [] crunchifyCountingSortAlgorithm (int [] crunchifyArray) {

        // getAsInt(): ถ้ามีค่าอยู่ ให้ส่งกลับค่า มิฉะนั้น ส่ง NoSuchElementException
        int crunchifyMax = Arrays.stream(crunchifyArray).max().getAsInt();
        int[] crunchifyCount = ใหม่ int[crunchifyMax + 1];

        // crunchifyCount การเกิดขึ้นของแต่ละค่าในอาร์เรย์อินพุต
        สำหรับ (int i = 0; i < crunchifyArray.length; i++) {
            crunchifyCount[crunchifyArray[i]]++;
            crunchifyPrint("การเพิ่ม 1 เพื่อ crunchifyCount[" + crunchifyArray[i] 
                    + "], อาร์เรย์ crunchifyCount อยู่ในขณะนี้: " + Arrays.toString(crunchifyCount));
        }

        crunchifyPrint ("\n");

        int k = 0;
        สำหรับ (int i = 0; i <= crunchifyMax; i++) {
            สำหรับ (int j = 0; j < crunchifyCount[i]; j++) {
                crunchifyArray[k++] = i;
                crunchifyPrint("การเพิ่ม " + i + " ไปยังตำแหน่ง " + (k - 1) 
                        + " ในเอาต์พุตอาร์เรย์ ตอนนี้เอาต์พุตอาร์เรย์คือ: " + Arrays.toString(crunchifyArray));
            }
        }

        กลับ crunchifyArray;
    }

}

เพียงเรียกใช้โปรแกรมด้านบนเป็น Java Application ใน IntelliJ IDEA หรือ Eclipse IDE และคุณจะได้ผลลัพธ์ดังนี้

ผลลัพธ์คอนโซล IntelliJ IDEA

 อาร์เรย์ดั้งเดิม: [9, 3, 6, 6, 1, 12, 32, 29, 2, 9, 3]


การเพิ่ม 1 ให้กับ crunchifyCount[9] ตอนนี้อาร์เรย์ของ crunchifyCount คือ: [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
การเพิ่ม 1 ให้กับ crunchifyCount[3] ตอนนี้อาร์เรย์ crunchifyCount คือ: [0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
การเพิ่ม 1 ให้กับ crunchifyCount[6] ตอนนี้อาร์เรย์ของ crunchifyCount คือ: [0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
การเพิ่ม 1 ให้กับ crunchifyCount[6] ตอนนี้อาร์เรย์ของ crunchifyCount คือ: [0, 0, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
การเพิ่ม 1 ให้กับ crunchifyCount[1] ตอนนี้อาร์เรย์ crunchifyCount คือ: [0, 1, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
การเพิ่ม 1 ให้กับ crunchifyCount[12] ตอนนี้อาร์เรย์ crunchifyCount คือ: [0, 1, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
การเพิ่ม 1 ให้กับ crunchifyCount[32] ตอนนี้อาร์เรย์ crunchifyCount คือ: [0, 1, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
การเพิ่ม 1 ให้กับ crunchifyCount[29] ตอนนี้อาร์เรย์ crunchifyCount คือ: [0, 1, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1]
การเพิ่ม 1 ให้กับ crunchifyCount[2] ตอนนี้อาร์เรย์ crunchifyCount คือ: [0, 1, 1, 1, 0, 0, 2, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1]
การเพิ่ม 1 ให้กับ crunchifyCount[9] ตอนนี้อาร์เรย์ crunchifyCount คือ: [0, 1, 1, 1, 0, 0, 2, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1]
การเพิ่ม 1 ให้กับ crunchifyCount[3] ตอนนี้อาร์เรย์ crunchifyCount คือ: [0, 1, 1, 2, 0, 0, 2, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1]


การเพิ่ม 1 ไปยังตำแหน่ง 0 ในอาร์เรย์เอาต์พุต ตอนนี้อาร์เรย์เอาต์พุตคือ: [1, 3, 6, 6, 1, 12, 32, 29, 2, 9, 3]
การเพิ่ม 2 ในตำแหน่งที่ 1 ในอาร์เรย์เอาต์พุต ตอนนี้อาร์เรย์เอาต์พุตคือ: [1, 2, 6, 6, 1, 12, 32, 29, 2, 9, 3]
การเพิ่ม 3 ในตำแหน่งที่ 2 ในอาร์เรย์เอาต์พุต ตอนนี้อาร์เรย์เอาต์พุตคือ: [1, 2, 3, 6, 1, 12, 32, 29, 2, 9, 3]
การเพิ่ม 3 ในตำแหน่งที่ 3 ในอาร์เรย์เอาต์พุต ตอนนี้อาร์เรย์เอาต์พุตคือ: [1, 2, 3, 3, 1, 12, 32, 29, 2, 9, 3]
การเพิ่ม 6 ในตำแหน่งที่ 4 ในอาร์เรย์เอาต์พุต ตอนนี้อาร์เรย์เอาต์พุตคือ: [1, 2, 3, 3, 6, 12, 32, 29, 2, 9, 3]
การเพิ่ม 6 ไปที่ตำแหน่ง 5 ในอาร์เรย์เอาต์พุต ตอนนี้อาร์เรย์เอาต์พุตจะเป็น: [1, 2, 3, 3, 6, 6, 32, 29, 2, 9, 3]
การเพิ่ม 9 ไปยังตำแหน่ง 6 ในอาร์เรย์เอาต์พุต ตอนนี้อาร์เรย์เอาต์พุตจะเป็น: [1, 2, 3, 3, 6, 6, 9, 29, 2, 9, 3]
การเพิ่ม 9 ไปยังตำแหน่ง 7 ในอาร์เรย์เอาต์พุต ตอนนี้อาร์เรย์เอาต์พุตจะเป็น: [1, 2, 3, 3, 6, 6, 9, 9, 2, 9, 3]
การเพิ่ม 12 ไปที่ตำแหน่ง 8 ในอาร์เรย์เอาต์พุต ตอนนี้อาร์เรย์เอาต์พุตจะเป็น: [1, 2, 3, 3, 6, 6, 9, 9, 12, 9, 3]
การเพิ่ม 29 ไปที่ตำแหน่ง 9 ในอาร์เรย์เอาต์พุต ตอนนี้อาร์เรย์เอาต์พุตจะเป็น: [1, 2, 3, 3, 6, 6, 9, 9, 12, 29, 3]
การเพิ่ม 32 ไปที่ตำแหน่ง 10 ในอาร์เรย์เอาต์พุต ขณะนี้อาร์เรย์เอาต์พุตคือ: [1, 2, 3, 3, 6, 6, 9, 9, 12, 29, 32]


ผลลัพธ์ของอัลกอริทึมการเรียงลำดับการนับแบบขบเคี้ยว: [1, 2, 3, 3, 6, 6, 9, 9, 12, 29, 32]

กระบวนการเสร็จสิ้นด้วยรหัสออก 0 
ใช้อัลกอริทึมการเรียงลำดับการนับใน Java - ผลลัพธ์ IntelliJ IDEA

แจ้งให้เราทราบหากคุณประสบปัญหาใด ๆ ที่ทำงานเหนือโปรแกรม Counting Sort Algorithm Java