ตัวอย่างของบทความนี้บอกการเรียงลำดับของการสรุปอัลกอริทึมการเรียงลำดับ Java แบ่งปันสำหรับทุกคนสำหรับการอ้างอิงของคุณ การวิเคราะห์เฉพาะมีดังนี้:
ในปี 1991 Robert W. Flayd ศาสตราจารย์ที่ภาควิชาวิทยาศาสตร์คอมพิวเตอร์ที่ภาควิชาวิทยาศาสตร์คอมพิวเตอร์ที่ Stanford University และ J. Williams ในปี 1964 ได้คิดค้น Essence Heap ที่มีชื่อเสียง บทความนี้ส่วนใหญ่แนะนำ Java ให้กับการเรียงลำดับกอง
Heapsort หมายถึงอัลกอริทึมการเรียงลำดับที่ออกแบบโดยโครงสร้างข้อมูลเสาเข็ม (HEAP) ซึ่งสามารถใช้คุณสมบัติของอาร์เรย์เพื่อค้นหาองค์ประกอบของดัชนีที่ระบุได้อย่างรวดเร็ว ลำดับการจัดเรียงเป็นวิธีการเรียงลำดับที่ไม่แน่นอน
คำสั่งซ้อนใช้คุณสมบัติของสูงสุด (หรือต่ำสุด) ของคำหลักของเสาเข็มขนาดใหญ่ (หรือกองรากขนาดเล็ก) ระเบียนด้านบนซึ่งทำให้บันทึกคำหลัก (หรือขั้นต่ำ) สูงสุดในพื้นที่ปัจจุบันที่ไม่เป็นระเบียบ
(1) ความคิดพื้นฐานจัดเรียงด้วยกองขนาดใหญ่
①แรกสร้างไฟล์เริ่มต้น r [1..N] ลงในกองรากขนาดใหญ่ ตอบสนอง r [1 .. n-1] .keys≤r [n]. key
③เนื่องจากรูทใหม่ R [1] อาจละเมิดธรรมชาติของกองหลังจากการแลกเปลี่ยนดังนั้นควรปรับภูมิภาคที่ไม่เป็นระเบียบในปัจจุบัน R [1 .. N-1] ควรปรับเป็นกอง จากนั้นคำหลักในคำหลักใน R [1..N-1] จะถูกแลกเปลี่ยนอีกครั้งกับบันทึกสุดท้าย R [N-1] ในช่วงเวลาซึ่งได้รับภูมิภาคใหม่ที่ไม่เป็นระเบียบ R [1 ..... N-2 ] และพื้นที่ที่เป็นระเบียบ r [n-1..n] และยังคงตอบสนองความสัมพันธ์ r [1 ..- .. n-2]. keys≤r [n-1..n] [1..N-2] ปรับเป็นกอง
นูปิโน
จนกว่าจะมีเพียงองค์ประกอบเดียวในพื้นที่ที่ไม่เป็นระเบียบ
(2) การทำงานพื้นฐานของอัลกอริทึมการเรียงลำดับของรากขนาดใหญ่:
①การเริ่มต้นการดำเนินงาน: การก่อสร้าง R [1..N] ลงในกองเริ่มต้น;
②การดำเนินการพื้นฐานของแต่ละประเภท: แลกเปลี่ยนบันทึกสุดท้ายของการบันทึกเสาเข็ม R [1] ในพื้นที่ปัจจุบันที่ไม่เป็นระเบียบแล้วปรับพื้นที่ใหม่ที่ไม่เป็นระเบียบให้เป็นกอง (หรือที่เรียกว่าการสร้างใหม่)
สังเกต:
①เพียงแค่ทำการเรียงลำดับ N-1 และเลือกคำหลัก N-1 ที่ใหญ่กว่าเพื่อเพิ่มไฟล์ตามลำดับ
②การเรียงลำดับด้วยรากเล็ก ๆ นั้นคล้ายกับรากขนาดใหญ่ แต่ผลลัพธ์การเรียงลำดับนั้นลดลงและเป็นระเบียบ ลำดับการซ้อนและการเลือกการเรียงลำดับโดยตรงนั้นตรงกันข้าม: เมื่อใดก็ตามที่ภูมิภาคที่ไม่เป็นระเบียบอยู่เสมอก่อนที่พื้นที่ที่เป็นระเบียบและพื้นที่ที่เป็นระเบียบจะค่อยๆขยายจากด้านหลังของเวกเตอร์ดั้งเดิมไปยังเวกเตอร์ทั้งหมด
การใช้รหัส:
การทดสอบระดับสาธารณะ {สาธารณะคงที่ int [] heap = {10, 32, 1, 9, 5, 7, 0, 4, 3}; {int i; +) System.out .printf ("%3s", heap); (i = 1; i <index -1; i ++) system.out.printf ("%3s", heap); เป็นโมฆะ creap (int root, int index) {int i, j; submp = head [root]; [j]) เสร็จสิ้น = 1; ; ; // เริ่มต้นการเรียงลำดับสแต็กสำหรับ (i = index-1; i> = 1; i ------- {temp = heap; // ค่ารูทของฮีปและการแลกเปลี่ยนค่าสุดท้าย heap = head [1]; heap [1] = testheap (1, i); "%3s", heap [j]);
ฮีปสามารถถือได้ว่าเป็นต้นไม้และความสูงของโหนดในความสูงสามารถกำหนดเป็นจำนวนเส้นทางการตกอย่างง่ายที่ยาวที่สุดจากโหนดไปยังโหนดใบไม้ ราก. เราจะเห็นว่าการดำเนินการพื้นฐานบางอย่างในโครงสร้างกองส่วนใหญ่เป็นสัดส่วนกับความสูงของต้นไม้ซึ่งก็คือ O (LGN) ผ่านการอ่านบทความนี้ฉันหวังว่าจะช่วยคุณ
หวังว่าบทความนี้จะเป็นประโยชน์กับการออกแบบโปรแกรม Java ของทุกคน