ในบทช่วยสอนรายละเอียดนี้ เราจะแสดงการทำงานของ เสถียร_เรียงลำดับ() ใน C++
วิธีใช้ฟังก์ชัน stable_sort() ใน C++
ใน C++, เสถียร_เรียงลำดับ() เป็นอัลกอริธึมไลบรารีมาตรฐานที่จัดเรียงองค์ประกอบตามลำดับที่เพิ่มขึ้นและคงลำดับเดิมสำหรับองค์ประกอบที่เทียบเท่า ซึ่งหมายความว่าหากองค์ประกอบทั้งสองเท่ากัน องค์ประกอบที่ปรากฏก่อนในคอนเทนเนอร์ก่อนการจัดเรียงจะยังคงปรากฏเป็นอันดับแรกในรายการที่จัดเรียง ฟังก์ชันนี้ทำงานโดยแบ่งคอนเทนเนอร์ซ้ำๆ (อาร์เรย์ เวกเตอร์ รายการที่เชื่อมโยง) จัดเรียงแยกกัน แล้วรวมเข้าด้วยกันเพื่อให้ได้คอนเทนเนอร์ที่จัดเรียง มันมาภายใต้ <อัลกอริทึม> ไฟล์ส่วนหัว
ไวยากรณ์ทั่วไปสำหรับการใช้ เสถียร_เรียงลำดับ() ใน C ++ คือ:
เสถียร_เรียงลำดับ ( RandomAccessIterator ก่อน , RandomAccessIterator ล่าสุด ) ;
ที่นี่ อันดับแรก เป็นตัววนซ้ำที่ชี้ไปยังองค์ประกอบแรกในช่วงที่จะจัดเรียง และ ล่าสุด เป็นตัววนซ้ำที่ชี้ไปที่องค์ประกอบหลังจากองค์ประกอบสุดท้ายในช่วงที่จะจัดเรียง
เดอะ เสถียร_เรียงลำดับ() ฟังก์ชันใช้ลำดับที่ไม่ลดลงเพื่อจัดเรียงรายการในช่วง [ตัวแรก ตัวสุดท้าย] เช่น จากองค์ประกอบที่เล็กที่สุดไปยังองค์ประกอบที่ใหญ่ที่สุด ฟังก์ชันโดยค่าเริ่มต้นจะเปรียบเทียบรายการผ่าน ตัวดำเนินการน้อยกว่า (<)
ตัวอย่างที่ 1
พิจารณาโค้ดตัวอย่างด้านล่าง ในโค้ดนี้ เราได้สร้าง รายการเวกเตอร์ และเริ่มต้นด้วยค่าบางอย่าง ต่อไปเราใช้ เสถียร_เรียงลำดับ() เพื่อเรียงลำดับค่าของเวกเตอร์ที่กำหนดจากน้อยไปหามาก เวกเตอร์ที่ไม่เรียงลำดับและเรียงลำดับจะถูกพิมพ์บนคอนโซลโดยใช้ลูปตามช่วง
#รวมถึง#รวม <เวกเตอร์>
#include <อัลกอริทึม>
ใช้เนมสเปซมาตรฐาน ;
นานาชาติ หลัก ( )
{
เวกเตอร์ < นานาชาติ > รายการ = { 5 , 2 , 25 , 4 , 9 , 33 , 38 , 26 } ;
ศาล << 'ตัวเลขก่อนจัดเรียง: ' ;
แต่ละ ( รายการ. เริ่ม ( ) , รายการ. จบ ( ) , [ ] ( นานาชาติ x ) {
ศาล << x << ' ' ;
} ) ;
เสถียร_เรียงลำดับ ( รายการ. เริ่ม ( ) , รายการ. จบ ( ) ) ;
ศาล << ' \n ตัวเลขหลังจากจัดเรียง: ' ;
แต่ละ ( รายการ. เริ่ม ( ) , รายการ. จบ ( ) , [ ] ( นานาชาติ x ) {
ศาล << x << ' ' ;
} ) ;
กลับ 0 ;
}
ตัวอย่างที่ 2
ในตัวอย่างด้านล่าง เราได้สร้างอาร์เรย์จำนวนเต็มและกำหนดค่าเริ่มต้นด้วยค่าบางค่า จากนั้นตามค่าเริ่มต้น เสถียร_เรียงลำดับ() จัดเรียงองค์ประกอบตามลำดับจากน้อยไปหามาก:
#รวมถึง#include <อัลกอริทึม>
ใช้เนมสเปซมาตรฐาน ;
นานาชาติ หลัก ( )
{
นานาชาติ อาร์เรย์ [ ] = { 12 , 7 , 7 , 1 , 8 , 7 , 3 , 4 , 22 , 0 } ;
นานาชาติ น = ขนาดของ ( อาร์เรย์ ) / ขนาดของ ( อาร์เรย์ [ 0 ] ) ;
ศาล << 'อาร์เรย์ดั้งเดิมคือ: \n ' ;
สำหรับ ( นานาชาติ ฉัน = 0 ; ฉัน < น ; ++ ฉัน ) {
ศาล << อาร์เรย์ [ ฉัน ] << ' ' ;
}
เสถียร_เรียงลำดับ ( อาร์เรย์ , อาร์เรย์ + น ) ;
ศาล << ' \n อาร์เรย์หลังจากการเรียงลำดับคือ: \n ' ;
สำหรับ ( นานาชาติ ฉัน = 0 ; ฉัน < น ; ++ ฉัน ) {
ศาล << อาร์เรย์ [ ฉัน ] << ' ' ;
}
กลับ 0 ;
}
ตัวอย่างที่ 3
เดอะ เสถียร_เรียงลำดับ ใช้พารามิเตอร์ที่สามเพื่อระบุลำดับสำหรับการเรียงลำดับองค์ประกอบ ในตัวอย่างด้านล่าง เราได้ใช้ มากกว่า() ฟังก์ชั่นด้วย เสถียร_เรียงลำดับ() เพื่อจัดเรียงองค์ประกอบของอาร์เรย์จากมากไปน้อย
#รวมถึง#include <อัลกอริทึม>
ใช้เนมสเปซมาตรฐาน ;
นานาชาติ หลัก ( )
{
นานาชาติ อาร์เรย์ [ ] = { 12 , 7 , 7 , 1 , 8 , 7 , 3 , 4 , 22 , 0 } ;
นานาชาติ น = ขนาดของ ( อาร์เรย์ ) / ขนาดของ ( อาร์เรย์ [ 0 ] ) ;
ศาล << 'อาร์เรย์ดั้งเดิม: \n ' ;
สำหรับ ( นานาชาติ ฉัน = 0 ; ฉัน < น ; ++ ฉัน ) {
ศาล << อาร์เรย์ [ ฉัน ] << ' ' ;
}
เสถียร_เรียงลำดับ ( อาร์เรย์ , อาร์เรย์ + น , มากขึ้น < นานาชาติ > ( ) ) ;
ศาล << ' \n อาร์เรย์หลังจากการเรียงลำดับ : \n ' ;
สำหรับ ( นานาชาติ ฉัน = 0 ; ฉัน < น ; ++ ฉัน ) {
ศาล << อาร์เรย์ [ ฉัน ] << ' ' ;
}
กลับ 0 ;
}
บรรทัดล่าง
เดอะ เสถียร_เรียงลำดับ() ฟังก์ชันใน C++ เป็นอัลกอริธึมไลบรารีมาตรฐานที่ใช้ในการจัดเรียงองค์ประกอบในคอนเทนเนอร์ในลำดับที่ไม่ลดลง ในขณะที่ยังคงลำดับสัมพัทธ์ขององค์ประกอบในคอนเทนเนอร์ที่มีค่าเดียวกัน สามารถใช้กับคอนเทนเนอร์ต่างๆ เช่น อาร์เรย์ เวกเตอร์ และรายการที่เชื่อมโยง นอกจากนี้ ต้องใช้พารามิเตอร์ที่สามเพื่อระบุลำดับสำหรับองค์ประกอบการเรียงลำดับ