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

โปรแกรม Java เรียงลำดับตัวอักษรในสตริง


บทนำ

ในบทความนี้ เราจะเรียนรู้วิธีการเรียงลำดับตัวอักษรในสตริง (Sort a string) สตริงเป็นชนิดข้อมูลที่ประกอบด้วยตัวอักษรหนึ่งตัวขึ้นไป และล้อมรอบด้วยเครื่องหมายคำพูดคู่ (" ") สตริงเป็นลำดับของตัวอักษร

ตัวอย่างการทำงาน

อินพุทตัวอย่าง:

Input string: javaprogram

เอาต์พุทที่คาดหวัง:

String after sorting is: [a, a, a, g, j, m, o, p, r, r, v]

อัลกอริทึม

ขั้นตอนที่ 1 - เริ่มต้น
ขั้นตอนที่ 2 - ประกาศสตริง input_string, อาร์เรย์ตัวอักษร charArray, ตัวอักษร temp และจำนวนเต็ม string_size
ขั้นตอนที่ 3 - กำหนดค่า
ขั้นตอนที่ 4 - กำหนดสตริงให้กับอาร์เรย์ตัวอักษร
ขั้นตอนที่ 5 - วนลูปซ้อน (Nested loops) ตรวจสอบค่าติดกัน หากไม่เรียงแล้ว สลับด้วย temp
ขั้นตอนที่ 6 - แสดงอาร์เรย์ที่เรียงแล้ว
ขั้นตอนที่ 7 - จบการทำงาน

ตัวอย่างที่ 1: เขียนในฟังก์ชัน main โดยตรง (Bubble Sort)

import java.util.Arrays;

public class SortString {
    public static void main(String args[]) {
        int temp, string_size;
        String input_string = "javaprogram";
        System.out.println("The string is defined as: " + input_string);
        char charArray[] = input_string.toCharArray();
        string_size = charArray.length;
        for(int i = 0; i < string_size; i++ ) {
            for(int j = i+1; j < string_size; j++) {
                if(charArray[i] > charArray[j]) {
                    temp = charArray[i];
                    charArray[i] = charArray[j];
                    charArray[j] = (char) temp;
                }
            }
        }
        System.out.println("\nThe characters of the string after sorting is: " + Arrays.toString(charArray));
    }
}

เอาต์พุท

The string is defined as: javaprogram
The characters of the string after sorting is: [a, a, a, g, j, m, o, p, r, r, v]

ตัวอย่างที่ 2: ใช้เมธอดแยก (Object-Oriented Style) - มีข้อผิดพลาดในโค้ดต้นฉบับ

⚠️ โค้ดต้นฉบับมีข้อผิดพลาด: `static void sort(string input_string)` ควรเป็น `String` (พิมพ์ใหญ่) และขาด import Arrays

import java.util.Arrays;

public class SortString {
    static void sort(String input_string) {
        int temp, string_size;
        char charArray[] = input_string.toCharArray();
        string_size = charArray.length;
        for(int i = 0; i < string_size; i++ ) {
            for(int j = i+1; j < string_size; j++) {
                if(charArray[i] > charArray[j]) {
                    temp = charArray[i];
                    charArray[i] = charArray[j];
                    charArray[j] = (char) temp;
                }
            }
        }
        System.out.println("\nThe characters of the string after sorting is: " + Arrays.toString(charArray));
    }
    
    public static void main(String args[]) {
        String input_string = "javaprogram";
        System.out.println("The string is defined as: " + input_string);
        sort(input_string);
    }
}

เอาต์พุท

The string is defined as: javaprogram
The characters of the string after sorting is: [a, a, a, g, j, m, o, p, r, r, v]

วิธีที่ทันสมัยและมีประสิทธิภาพกว่า (Java 8+):

// ใช้ Stream API + Arrays.sort()
public static String sortString(String input) {
    char[] chars = input.toCharArray();
    Arrays.sort(chars); // Dual-pivot Quicksort O(n log n)
    return new String(chars);
}

// หรือ one-liner
String sorted = input.chars()
    .sorted()
    .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
    .toString();

หมายเหตุ: โค้ดต้นฉบับใช้ Bubble Sort/Selection Sort (O(n²)) ในขณะที่ Arrays.sort() ใช้ Dual-pivot Quicksort (O(n log n)) เร็วกว่ามากสำหรับข้อมูลขนาดใหญ่