เลือกแนวคิดการเรียงลำดับ
การคัดแยกการคัดเลือกยังเป็นอัลกอริทึมการเรียงลำดับการแลกเปลี่ยนซึ่งมีความคล้ายคลึงกันในการเรียงลำดับฟอง ดังนั้นโดยส่วนตัวแล้วฉันเชื่อว่าการเลือกการเรียงลำดับถือได้ว่าเป็นอัลกอริทึมที่ได้รับการปรับปรุงสำหรับการเรียงลำดับฟอง ความคิดของมันมีดังนี้:
สมมติว่าอาร์เรย์ arr [] ถูกจัดเรียงแล้วและมีองค์ประกอบ n
1 เปรียบเทียบองค์ประกอบแรก (ใน Java ตัวห้อยคือ 0) กับองค์ประกอบที่สอง หากอดีตยิ่งใหญ่กว่าหลังมันจะต้องไม่เล็กที่สุด แต่เราไม่รีบเร่งที่จะเปลี่ยนเหมือนการเรียงลำดับฟอง เราสามารถตั้งค่าตัวแปรชั่วคราว A เพื่อจัดเก็บตัวห้อยขององค์ประกอบที่เล็กที่สุดในปัจจุบันนี้ จากนั้นเราจะเปรียบเทียบองค์ประกอบที่เล็กที่สุดกับองค์ประกอบที่สามต่อไป หากยังไม่เล็กที่สุดเราก็จะแก้ไขค่าของ A ด้วยวิธีนี้จนกว่าการเปรียบเทียบกับองค์ประกอบสุดท้ายจะเสร็จสมบูรณ์แน่นอนว่าจะต้องเป็นตัวห้อยขององค์ประกอบที่เล็กที่สุด
2. หากค่าของ A ไม่ใช่ 0 (ค่าเริ่มต้นนั่นคือตัวห้อยขององค์ประกอบแรก) ให้แลกเปลี่ยนองค์ประกอบทั้งสองด้วยตัวห้อย A และ 0
3. ทำซ้ำกระบวนการข้างต้นและเริ่มการเปรียบเทียบกับองค์ประกอบกับตัวห้อย 1 ในครั้งนี้เนื่องจากองค์ประกอบที่เล็กที่สุดถูกวางไว้ที่ตำแหน่งด้วยตัวห้อย 0
4. ด้วยวิธีนี้จนกระทั่งมีเพียงองค์ประกอบสุดท้ายเท่านั้นคุณสามารถมั่นใจได้ว่าองค์ประกอบนี้ใหญ่ที่สุด
5. การเรียงลำดับเสร็จสมบูรณ์
เห็นได้ชัดว่าอัลกอริทึมนี้ยังต้องใช้การเรียงลำดับ N-1
ควรสังเกตว่าคำอธิบายข้างต้นเป็นเพียงวิธีการค้นหาค่าต่ำสุดในแต่ละครั้ง ในความเป็นจริงคุณยังสามารถค้นหาค่าสูงสุดทุกครั้ง แต่คุณต้องวางไว้บนหางของอาร์เรย์ทุกครั้ง
รหัสการใช้งาน Java:
SelectArray.java
แพ็คเกจ ch02; คลาสสาธารณะเลือก {// อาร์เรย์ส่วนตัวยาว [] arr; // ขนาดของข้อมูลที่ถูกต้องใน array private int elems; // ตัวสร้างค่าเริ่มต้นสาธารณะเลือก () {arr = ใหม่ยาว [50]; } public selectarray (int max) {arr = new long [max]; } // แทรกข้อมูลโมฆะสาธารณะ (ค่ายาว) {arr [elems] = ค่า; Elems ++; } // การแสดงข้อมูลโมฆะสาธารณะแสดงผล () {สำหรับ (int i = 0; i <elems; i ++) {system.out.print (arr [i]+""); } system.out.println (); } // เลือกการจัดเรียงโมฆะสาธารณะ selectSort () {int min = 0; tmp ยาว = 0l; สำหรับ (int i = 0; i <elems -1; i ++) {min = i; สำหรับ (int j = i+1; j <elems; j ++) {ถ้า (arr [j] <arr [min]) {min = j; }} tmp = arr [i]; arr [i] = arr [min]; arr [min] = tmp; -รหัสทดสอบ:
แพ็คเกจ CH02; Public Class Testselectarray {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {selectArray sarr = ใหม่ selectArray (); sarr.insert (89); sarr.insert (54); sarr.insert (667); sarr.insert (7); sarr.insert (12); sarr.insert (43); sarr.insert (12); sarr.display (); sarr.selectsort (); sarr.display (); - ผลลัพธ์: