บทนำ
ในบทความนี้ เราจะเรียนรู้วิธีการเรียงลำดับตัวอักษรในสตริง (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)) เร็วกว่ามากสำหรับข้อมูลขนาดใหญ่