Skip to Content
CoursesCSC102เรียงเลขจากมากไปน้อยโดยใช้ลูป

เรียงเลขจากมากไปน้อยโดยใช้ลูป

โจทย์

เขียนโปรแกรมเพื่อจัดเรียงสมาชิกของอาร์เรย์ที่กำหนดในลำดับจากน้อยไปมาก แล้วจึงสลับลำดับของอาร์เรย์ที่จัดเรียงแล้ว โดยใช้เฉพาะลูปและการเลือก โปรแกรมควรอ่านจำนวนเต็มที่แทนจำนวนสมาชิกในอาร์เรย์ ตามด้วยจำนวนเต็มที่คั่นด้วยช่องว่างเป็นสมาชิกของอาร์เรย์ ผลลัพธ์ควรเป็นสมาชิกของอาร์เรย์ที่พิมพ์เรียงจากน้อยไปมากก่อน แล้วพิมพ์ในลำดับย้อนกลับในบรรทัดเดียว โดยคั่นด้วยช่องว่าง

หมายเหตุ: ห้ามใช้ “Array.sort()” หรือเมธอดการจัดเรียงที่มีมาในตัวอื่น ๆ

InputOutput
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 และ 2 จนกว่าจะไม่มีการสลับตำแหน่งเกิดขึ้นในรอบนั้น

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

สมมติว่าเรามีอาร์เรย์ [3, 1, 4, 5, 2] และต้องการเรียงจากมากไปน้อย

  1. รอบแรก: [3, 1, 4, 5, 2] -> [3, 4, 5, 2, 1]
  2. รอบสอง: [3, 4, 5, 2, 1] -> [4, 5, 3, 2, 1]
  3. รอบสาม: [4, 5, 3, 2, 1] -> [5, 4, 3, 2, 1]
  4. รอบสี่: [5, 4, 3, 2, 1] (ไม่มีการเปลี่ยนแปลง)
ปรับปรุงล่าสุด