collections.sort ()
การเรียงลำดับของ Java สามารถนำไปใช้กับ collectileos.sort ()
มีสองวิธีในการเรียงลำดับรายการด้วยวิธีการรวบรวมวิธี:
สิ่งแรกคือวัตถุในรายการเพื่อใช้อินเทอร์เฟซที่เปรียบเทียบได้ดังนี้:
/*** เรียงลำดับผู้ใช้ตามคำสั่ง*/ผู้ใช้ระดับสาธารณะใช้ความเปรียบเทียบกัน <ผู้ใช้> {ชื่อสตริงส่วนตัว; NAME;} Public Integer GetRder () {return order;} public void setOrder (คำสั่งซื้อจำนวนเต็ม) {this.order = order;} public int compereto (ผู้ใช้ Arg0) {rn this.getOrder () );}} ทดสอบ:
การทดสอบระดับสาธารณะ {โมฆะคงที่หลัก (สตริง [] ศิลปะ) {ผู้ใช้ผู้ใช้ 1 = ผู้ใช้ใหม่ (); ); (รายการ); ผลลัพธ์ผลลัพธ์มีดังนี้
AB
วิธีที่สองคือการบรรลุตามวิธีการโหลดของคอลเลกชัน Sort เช่น ::
/*** เรียงลำดับผู้ใช้ตามคำสั่ง*/ผู้ใช้ระดับสาธารณะ {// ไม่จำเป็นต้องใช้อินเทอร์เฟซที่เปรียบเทียบได้ return order;} public void setOrder (ลำดับจำนวนเต็ม) {this.order = order;}}}} เขียนในชั้นเรียนหลัก ::
การทดสอบระดับสาธารณะ {โมฆะคงที่หลัก (สตริง [] ศิลปะ) {ผู้ใช้ผู้ใช้ 1 = ผู้ใช้ใหม่ (); ); Int Compare (ผู้ใช้ Arg0, arg1) {return arg0.getOrder () getName ());}}} ผลลัพธ์ผลลัพธ์มีดังนี้
AB
โครงสร้างรหัสเดิมนั้นง่าย แต่สามารถจัดเรียงได้ตามแอตทริบิวต์คงที่เท่านั้น
เลือกสิ่งที่ดีที่สุด
อัลกอริทึมการเรียงลำดับทั่วไป
มาดูการฝึกรหัส Java ด้วยอัลกอริทึมการเรียงลำดับคลาสสิกหลายอย่าง:
การเรียงลำดับฟอง
Public Void Bubblesort (int a [], int n) {int i, j; j ++) {ถ้า (a [j]> a [j + 1]) {a [j] = a [j] ^ a [j + 1]; [J + 1];แทรกโดยตรง
INSERTSORT แบบคงที่สาธารณะ (int a [], int n) {int i, j, tmp; ; j; ;}}}เลือกโดยตรง
โมฆะสาธารณะคงที่ selectsort (int a [], int n) {int i, j, local; n; [loc] = a [i] ^ a [loc];การจัดเรียง
/ ** * Heap (จากขนาดเล็กถึงใหญ่) * * * @param a * @param n */ public static void heapsort (int a [], int n) {int tmp; n); สำหรับ (int j = n-1; j> = 1; 0, j);}} / ** * สร้างรากจำนวนมาก * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * n -2) / 2; i> = 0; ฉัน * @param n * / โมฆะคงที่ maxheapify (int a [], int i, int n) {int ซ้าย, ขวา, ท้องถิ่น; i + 2; ;} ถ้า (loc! = i) {a [i] = a [loc] ^ a [i]; a [i];} else {break;}}}การเรียงลำดับเร็ว
Public Void Quicksort (int a [], int bt, int ed) {ถ้า (bt <ed) {int pivot = pivotputition (a, bt, ed); 1, ed);}} โมฆะคงที่ส่วนตัว swapvar (int a [], int bt, int ed) {int mid = bt + (ed -bt) / 2; ) bt] = a [bt] ^ a [mid]; bt, int ed) {// ใช้ค่ากลางเป็นจุดยืนเพื่อป้องกันอาร์เรย์ในลักษณะที่เป็นระเบียบ o (n^2) สถานการณ์ swapvar (a, bt, ed); ed) {ในขณะที่ (bt <ed && a [ed]> = stand) {ed-;} ถ้า (bt <ed) {a [bt ++] = a [ed]; bt ++;} ถ้า (bt <ed) {a [eds ---] = a [bt];} [bt] = state;ผสาน
โมฆะสาธารณะคงที่ Mergesort (int a [], int bt, int ed) {ถ้า (bt <ed) {int mid = bt + (ed -bt) / 2; ed); ; int tmp [] = new int [len]; = a [j]) {tmp [k] = a [i ++];} else {tmp [k] = a [j ++]; ] = a [j ++];} สำหรับ (i = 0; i <k; i ++) {a [bt+i] = tmp [i];}}โปรแกรมทดสอบ
มาสรุปอัลกอริทึมข้างต้น:
นำเข้า java.util.scanner; cin.nextint (); a = int ใหม่ [n]; ; ** * ผสานการเรียงลำดับ * * * @param a * @param bt * @param eds * / โมฆะโมฆะคงที่สาธารณะ (int a [], int bt, int ed) {ถ้า <ed) {int mid = bt + (ed -bt) / 2; param bt * @param mid * @param ed */ private static void mergearray (int a [], int bt, int mid, int ed) {int i, j, k, k, len = ed -bt + 1; tmp [] = new int [len]; <= a [j]) {tmp [k] = a [i ++];} else {tmp [k] = a [j ++];}} ในขณะที่ (i <= mid) {tmp [k ++ ] = a [i ++];} ในขณะที่ (j <= ed) {tmp [k ++] = a [j ++];} สำหรับ (i = 0; i <k; i ++) {a [ bt+i] = tmp [i];} / ** * เรียงลำดับอย่างรวดเร็ว * * * @param a * @param bt * @param ed * / โมฆะสาธารณะคงที่ public (int a [], int bt, int ed) { if (bt <ed) {int pivot) = pivotpartition (a, bt, ed); A [], int bt, int ed) {int mid = bt + (ed -bt) / 2; ] = a [bt] [mid]; param eds * @return */ private static int pivotpartition (int a [], int bt, int ed) {// ใช้ค่ากลางเป็นขาตั้งเพื่อป้องกันอาร์เรย์ในลักษณะที่เป็นระเบียบ o (n^2) swapvar (a, bt, ed); int stand = a [bt]; +] = a [ed];} ในขณะที่ (bt <ed && a [bt] <= stand) {bt ++;} ถ้า (bt <ed) {a [eds ---] = a [bt];} A [bt] = stand; ) {int tmp; [J]; A [J] = TMP; [], int n) {สำหรับ (int i = (n -2) / 2; i> = 0; i-) {maxheapify (a, i, n);} / ** * การบำรุงรักษากองการบำรุงรักษาสูงสุดเริ่มต้น จากการเสนอราคา i * * * * @param a * @param n * / โมฆะคงที่ maxheapify (int a [], int i, int n) {int ซ้าย, ขวา, local; 2 * i + 1; ]) {i = ขวา;} ถ้า (loc! = i) {a [a) i] = a [loc] ^ a [i]; i] = a [loc] ^ a [i];} else {break;}}}}} / ** * เลือกการเรียงลำดับโดยตรง * * * @param a * @param n * / โมฆะคงที่สาธารณะเลือก (int a [int a [int a [int a [int a [int a ], int n) {int i, j, local; (a [j] <a [loc]) {loc = j;}} ถ้า (loc! = i) {a) {a) [i] = a [i] ^ a [loc]; A [i] ^ a [loc]; (int a [], int n) {int i, j, tmp; 0; j-) {ถ้า (a [j]> tmp) {a [j + 1] = a [j];} else {break;}} a [j + 1] = tmp; เรียงลำดับ * * * @param a * @param n * / โมฆะแบบคงที่สาธารณะ bubblesort (int a [], int n) {int i, j; (j = 0; j <n -i -1; j ++) {ถ้า (a [j]> a [j +1]) {a [a [a j] = a [j] ^ a [j + 1]; * @param a * / public static void printarr (int a []) {สำหรับ (int i = 0; i <.length; i ++) {ถ้า (i == a.length -1) {system.out printf ("%d/n", a [i]);} else {system.out.printf ("%d", a [i]);}}}}}