เรียงเลขจากมากไปน้อยโดยใช้ลูป
โจทย์
เขียนโปรแกรมเพื่อจัดเรียงสมาชิกของอาร์เรย์ที่กำหนดในลำดับจากน้อยไปมาก แล้วจึงสลับลำดับของอาร์เรย์ที่จัดเรียงแล้ว โดยใช้เฉพาะลูปและการเลือก โปรแกรมควรอ่านจำนวนเต็มที่แทนจำนวนสมาชิกในอาร์เรย์ ตามด้วยจำนวนเต็มที่คั่นด้วยช่องว่างเป็นสมาชิกของอาร์เรย์ ผลลัพธ์ควรเป็นสมาชิกของอาร์เรย์ที่พิมพ์เรียงจากน้อยไปมากก่อน แล้วพิมพ์ในลำดับย้อนกลับในบรรทัดเดียว โดยคั่นด้วยช่องว่าง
หมายเหตุ: ห้ามใช้ “Array.sort()” หรือเมธอดการจัดเรียงที่มีมาในตัวอื่น ๆ
| Input | Output |
|---|---|
| 5 3 1 4 5 2 | 5 4 3 2 1 |
โค้ด
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] numbers = new int[n];
for (int i = 0; i < n; i++) {
numbers[i] = scanner.nextInt();
}
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (numbers[j + 1] > numbers[j]) {
int oldCurrentIndexValue = numbers[j];
numbers[j] = numbers[j + 1];
numbers[j + 1] = oldCurrentIndexValue;
}
}
}
for (int number : numbers) {
System.out.print(number + " ");
}
}
}คำอธิบาย
ขั้นตอนที่ 1: การนำเข้าและการตั้งค่าเริ่มต้น
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);- เรานำเข้า
Scannerซึ่งเป็นเครื่องมือที่ช่วยให้เราสามารถรับข้อมูลจากผู้ใช้ได้ - เราสร้างคลาสชื่อ
Mainและฟังก์ชันmainซึ่งเป็นจุดเริ่มต้นของโปรแกรม - เราสร้างออบเจ็กต์
Scannerเพื่อใช้ในการรับข้อมูล
ขั้นตอนที่ 2: การรับข้อมูลจากผู้ใช้
int n = scanner.nextInt();
int[] numbers = new int[n];
for (int i = 0; i < n; i++) {
numbers[i] = scanner.nextInt();
}- เรารับจำนวนตัวเลขที่ผู้ใช้ต้องการป้อนและเก็บไว้ในตัวแปร
n - เราสร้างอาร์เรย์ชื่อ
numbersที่มีขนาดเท่ากับn - เราใช้ลูป
forเพื่อรับตัวเลขจากผู้ใช้ทีละตัวและเก็บในอาร์เรย์numbers
ขั้นตอนที่ 3: การเรียงลำดับตัวเลขจากมากไปน้อย
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (numbers[j + 1] > numbers[j]) {
int oldCurrentIndexValue = numbers[j];
numbers[j] = numbers[j + 1];
numbers[j + 1] = oldCurrentIndexValue;
}
}
}- เราใช้การเรียงลำดับแบบฟองสบู่ (Bubble Sort) เพื่อเรียงตัวเลขจากมากไปน้อย
- ลูปด้านนอก (
i) จะทำงานn - 1ครั้ง เพื่อให้แน่ใจว่าเราได้เปรียบเทียบทุกคู่ของตัวเลข - ลูปด้านใน (
j) จะเปรียบเทียบตัวเลขทีละคู่ - ถ้าตัวเลขที่อยู่ถัดไป (
numbers[j + 1]) มากกว่าตัวเลขปัจจุบัน (numbers[j]) เราจะสลับตำแหน่งของมัน - การสลับตำแหน่งทำโดยใช้ตัวแปรชั่วคราว (
oldCurrentIndexValue) เพื่อเก็บค่าเดิมไว้
ขั้นตอนที่ 4: การแสดงผลลัพธ์
for (int number : numbers) {
System.out.print(number + " ");
}- เราใช้ลูป
for-eachเพื่อวนผ่านทุกตัวเลขในอาร์เรย์numbersที่ได้เรียงลำดับแล้ว - สำหรับแต่ละตัวเลข เราพิมพ์มันออกมาตามด้วยช่องว่าง
- เนื่องจากเราได้เรียงลำดับจากมากไปน้อยแล้ว การพิมพ์แบบนี้จะได้ผลลัพธ์เป็นตัวเลขเรียงจากมากไปน้อยโดยอัตโนมัติ
หลักการทำงาน
การเรียงลำดับแบบฟองสบู่ (Bubble Sort)
การเรียงลำดับแบบฟองสบู่ (Bubble Sort) เป็นอัลกอริทึมการเรียงลำดับที่ง่ายที่สุดวิธีหนึ่ง แต่อาจไม่มีประสิทธิภาพมากนักสำหรับข้อมูลจำนวนมาก ในโจทย์นี้ เราใช้ Bubble Sort เพื่อเรียงลำดับตัวเลขจากมากไปน้อย มาดูกันว่ามันทำงานอย่างไร
หลักการทำงานของ Bubble Sort
- เปรียบเทียบตัวเลขที่อยู่ติดกันทีละคู่
- ถ้าตัวเลขด้านขวามากกว่าตัวเลขด้านซ้าย ให้สลับตำแหน่งกัน
- ทำซ้ำขั้นตอนที่ 1 และ 2 จนกว่าจะไม่มีการสลับตำแหน่งเกิดขึ้นในรอบนั้น
ตัวอย่างการทำงาน
สมมติว่าเรามีอาร์เรย์ [3, 1, 4, 5, 2] และต้องการเรียงจากมากไปน้อย
- รอบแรก: [3, 1, 4, 5, 2] -> [3, 4, 5, 2, 1]
- รอบสอง: [3, 4, 5, 2, 1] -> [4, 5, 3, 2, 1]
- รอบสาม: [4, 5, 3, 2, 1] -> [5, 4, 3, 2, 1]
- รอบสี่: [5, 4, 3, 2, 1] (ไม่มีการเปลี่ยนแปลง)
ปรับปรุงล่าสุด