การจัดเรียงจำนวนเต็มจากน้อยไปมากเป็นตัวอย่างคำอธิบายสั้น ๆ ของกระบวนการเรียงลำดับฟองแบบสองทิศทาง: ก่อนอื่นให้ย้ายจำนวนสูงสุดจากด้านหน้าไปด้านหลังไปยังจุดสิ้นสุดจากนั้นให้ย้ายหมายเลขที่เล็กที่สุดจากด้านหลังไปด้านหน้าไปด้านหน้า อาร์เรย์ การเรียงลำดับฟองสองทางนั้นดีกว่าการเรียงลำดับฟองแบบดั้งเดิมเล็กน้อยเนื่องจากปลายทั้งสองของอาร์เรย์เรียงลำดับได้ดีในระหว่างการเรียงลำดับแบบสองทิศทางเราจำเป็นต้องประมวลผลส่วนตรงกลางของอาร์เรย์ในขณะที่ทางเดียวนั่นคือการเรียงลำดับฟองแบบดั้งเดิม เฉพาะองค์ประกอบที่หาง แม้ว่ามันจะปรับปรุงประสิทธิภาพเล็กน้อย แต่ก็ไม่สามารถปรับปรุงประสิทธิภาพการเรียงลำดับได้อย่างมีนัยสำคัญซึ่งถูกกำหนดโดยกระบวนการพื้นฐานของการเรียงลำดับฟอง บนพื้นฐานนี้ได้รับการปรับปรุงให้ดีขึ้น
ซอร์สโค้ดการเรียงลำดับฟองสองทาง:
การคัดลอกรหัสมีดังนี้:
แพ็คเกจ com.zc.manythread;
นำเข้า java.util.random;
-
* การจัดเรียงฟองสองทาง
* @author ฉัน
-
-
ชั้นเรียนสาธารณะ bbsort {
// อัลกอริทึมฟองแบบสองทิศทางช่วยลดจำนวนครั้งของการเรียงลำดับลูปได้อย่างมาก
public int [] sort (int [] a) โยนข้อยกเว้น {
int J;
ขีด จำกัด int = A.Length;
int st = -1;
ในขณะที่ (st <ขีด จำกัด ) {
// ต้องกำหนด ST และขีด จำกัด มิฉะนั้นถ้าอาร์เรย์ได้รับคำสั่งตั้งแต่ต้น
ST ++;
ขีด จำกัด-;
บูลีนสลับ = เท็จ;
// ลูปแรกให้ค่าสูงสุดถึงจุดสิ้นสุด
สำหรับ (j = st; j <limit; j ++) {
if (a [j]> a [j+1]) {
int t = a [j];
a [j] = a [j+1];
a [j+1] = t;
swapped = true;
-
-
if (! swapped) {
กลับ A;
}อื่น {
swapped = false;
// ลูปที่สองทำให้ค่าต่ำสุดที่จุดเริ่มต้น
สำหรับ (j = limit; -j> = st;) {
if (a [j]> a [j+1]) {
int t = a [j];
a [j] = a [j+1];
a [j+1] = t;
swapped = true;
-
-
if (! swapped) {
กลับ A;
-
-
-
กลับ A;
-
INT แบบคงที่ส่วนตัว [] สร้างขึ้น (จำนวน int) {
-
* ไม่มีอาร์เรย์ที่ซ้ำกัน
-
int [] data = new int [count];
สุ่มแรนด์ = ใหม่สุ่ม ();
บูลีน [] บูล = บูลีนใหม่ [100];
int num = 0;
สำหรับ (int i = 0; i <count; i ++) {
ทำ {
// หากหมายเลขที่สร้างขึ้นเหมือนกันให้วนลูปดำเนินการต่อ
num = rand.nextint (100);
} ในขณะที่ (bool [num]);
บูล [num] = true;
/* list.add (num);* /// รายการรายการ
ข้อมูล [i] = num;
-
ส่งคืนข้อมูล
-
โมฆะคงที่สาธารณะหลัก (สตริง [] args) {
จำนวน int สุดท้าย = 10;
int [] data = comentate (count);
สำหรับ (int n: data) {
System.out.print (n+"/t");
-
System.out.println ();
bsrot bsrot = ใหม่ bsrot (ข้อมูล);
พยายาม {
int [] a = bsrot.sort (ข้อมูล);
สำหรับ (int n: a) {
System.out.print (n+"/t");
-
} catch (Exception e) {
// todo catch block ที่สร้างอัตโนมัติ
E.PrintStackTrace ();
-
-
-
ผลการทำงาน: