ภาพรวม
การเรียงลำดับฟองเป็นอัลกอริทึมการเรียงลำดับที่ง่าย มันเข้าเยี่ยมชมลำดับซ้ำ ๆ ที่จะจัดเรียงเปรียบเทียบสององค์ประกอบในแต่ละครั้งและสลับพวกเขาหากพวกเขาไม่ถูกต้อง งานของการเยี่ยมชมลำดับจะถูกทำซ้ำจนกว่าลำดับจะถูกจัดเรียง ต้นกำเนิดของอัลกอริทึมนี้เป็นเพราะองค์ประกอบที่เล็กกว่าจะ "ลอย" ช้าลงไปยังจุดเริ่มต้นของลำดับผ่านการแลกเปลี่ยน
ที่จะพูดง่ายๆคือ:
การเรียงลำดับฟองเป็นมากกว่าตัวละครขนาดใหญ่ที่จมอยู่ด้านหลังอาร์เรย์ (สามารถเข้าใจได้ด้านล่าง) และตัวละครขนาดเล็กลอยอยู่ด้านหน้า (ด้านบน)
แผนภาพการตีความที่ใช้งานง่าย:
ขั้นตอน
เปรียบเทียบองค์ประกอบที่อยู่ติดกัน หากอันแรกนั้นใหญ่กว่าอันที่สองให้แลกเปลี่ยนกับทั้งสอง
ทำงานเดียวกันกับองค์ประกอบที่อยู่ติดกันแต่ละคู่เริ่มต้นจากคู่แรกถึงคู่สุดท้ายในตอนท้าย ณ จุดนี้องค์ประกอบสุดท้ายควรเป็นจำนวนมากที่สุด
ทำซ้ำขั้นตอนข้างต้นสำหรับองค์ประกอบทั้งหมดยกเว้นขั้นตอนสุดท้าย
ดำเนินการทำซ้ำขั้นตอนข้างต้นสำหรับองค์ประกอบที่น้อยลงและน้อยลงในแต่ละครั้งจนกว่าจะไม่มีคู่ของตัวเลขที่ต้องเปรียบเทียบ
ตัวอย่าง
ข้อมูลดิบ:
3 5 2 6 2
รอบแรก
การเปรียบเทียบ 3 และ 5, 5 มากกว่า 3, ไม่มีการแลกเปลี่ยน 3 5 2 6 2 ดำเนินการต่อไปเปรียบเทียบ 5 และ 2, 5 มากกว่า 2, ตำแหน่งแลกเปลี่ยน 3 2 5 6 2 ดำเนินการต่อไปเปรียบเทียบ 5 และ 6, 6 มากกว่า 5, ไม่มีการแลกเปลี่ยน 3 2 5 6 2 ต่อไปเปรียบเทียบ 6 และ 2, 6
รอบ 2
การเปรียบเทียบ 3 และ 2, 3 มากกว่า 2, ตำแหน่งแลกเปลี่ยน 2 3 5 2 6 การเปรียบเทียบ 3 และ 5, 5 มากกว่า 3, ไม่มีการแลกเปลี่ยน 2 3 5 2 6 การเปรียบเทียบ 5 และ 2, 5 มากกว่า 2, ตำแหน่งแลกเปลี่ยน 2 3 2 5 6 ไม่จำเป็นต้องเปรียบเทียบ 5 และ 6
รอบที่สาม
การเปรียบเทียบ 2 และ 3, 3 มากกว่า 2 ไม่จำเป็นต้องแลกเปลี่ยน 2 3 2 5 6 การเปรียบเทียบ 3 และ 2, มากกว่า 2 ไม่จำเป็นต้องเปรียบเทียบตำแหน่งการแลกเปลี่ยน 2 2 3 5 6 6
รอบ 4
เปรียบเทียบ 2 และ 2 โดยไม่ต้องแลกเปลี่ยน 2 2 3 5 6
สี่รอบจบ
2 2 3 5 6
การใช้งานรหัส (Java)
แพ็คเกจ com.coder4j.main.arithmetic.sorting; Bubble คลาสสาธารณะ { / ** * Bubble Sort * * @param Array * @return * / public Static int [] sort (int [] array) {int temp; // ลูปเลเยอร์แรกแสดงจำนวนรอบเปรียบเทียบเช่นองค์ประกอบความยาวและจำนวนรอบเปรียบเทียบคือความยาว -1 (ไม่จำเป็นต้องเปรียบเทียบกับตัวเอง) สำหรับ (int i = 0; i <array.length - 1; i ++) {system.out.println ("เธรด" + (i + 1) + // เลเยอร์ที่สองของลูปแต่ละการเปรียบเทียบสองตัวที่อยู่ติดกันจะลดลงหนึ่งครั้งและจำนวนครั้งจะลดลงเมื่อจำนวนรอบเพิ่มขึ้น แต่ละรอบกำหนดค่าที่ใหญ่ที่สุดและไม่จำเป็นต้องเปรียบเทียบอันที่ใหญ่ที่สุดสำหรับ (int j = 0; j <array.length - 1 - i; j ++) {ถ้า (อาร์เรย์ [j+1] <อาร์เรย์ [j]) {temp = array [j]; อาร์เรย์ [j] = อาร์เรย์ [j + 1]; อาร์เรย์ [j + 1] = อุณหภูมิ; } system.out.println ("th" + (i + 1) + "รอบ" th " + (j + 1) +" เปรียบเทียบ: "); สำหรับ (int k: array) {system.out.print (k +" ");} system.out.println (); } system.out.println ()}} returs array;ผลการทดสอบผลลัพธ์:
2 3 5 6 6 3 3 5 6 3 3 3 5 6 3 3 3 5 6 3 3 3 5 3 3 3 5 6 3 3 3 3 3 3 3 3 5 6 3 3 3 5 6 3 3 3 5 6 3 3 3 5 6 3 3 5 6 3 3 3 5 6 4 3 3 5 6 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 2 3 5 6 6
หลังจากการทดสอบมันสอดคล้องกับผลลัพธ์ในตัวอย่าง