แนวทางนี้แสดงการเรียงลำดับอาร์เรย์โดยใช้ qsort() ฟังก์ชันในภาษา C และยังช่วยให้คุณเข้าใจได้ด้วยโค้ดตัวอย่างภาษา C
qsort() ใน C
C ห้องสมุดมาตรฐานอำนวยความสะดวกให้เราด้วย qsort() ฟังก์ชันที่ใช้ในการจัดเรียงอาร์เรย์ เป็นฟังก์ชันที่ได้รับการปรับให้เหมาะสมที่สุดและรวดเร็วซึ่งสามารถทำงานกับอาร์เรย์ประเภทข้อมูลใดก็ได้
ส่วนหัวของไฟล์โดยใช้ qsort() ใน C
เดอะ qsort() วิธีการถูกกำหนดไว้ใน stdlib.h ไฟล์ส่วนหัวซึ่งต้องกำหนดก่อนดำเนินการ qsort() ในโปรแกรมภาษาซี
#รวม
การประกาศของ qsort()
คำประกาศของ qsort() ฟังก์ชั่นมีดังนี้:
เป็นโมฆะ qsort ( เป็นโมฆะ * ฐาน , number_of_elements , size_of_element , การเปรียบเทียบ_ฟังก์ชัน )
พารามิเตอร์ของฟังก์ชัน qsort()
พารามิเตอร์ของ qsort() ฟังก์ชั่นคือ:
ฐาน: ชี้ไปที่องค์ประกอบแรกของอาร์เรย์ที่จะจัดเรียง
number_of_elements: จำนวนองค์ประกอบในอาร์เรย์ที่จะจัดเรียง
size_of_element: ขนาดเป็นไบต์ของแต่ละองค์ประกอบในอาร์เรย์
การเปรียบเทียบ _ ฟังก์ชัน: ชี้ไปที่ฟังก์ชันการเปรียบเทียบที่กำหนดลำดับขององค์ประกอบ
ฟังก์ชันการเปรียบเทียบใน qsort() คืออะไร
ฟังก์ชันการเปรียบเทียบใช้พารามิเตอร์สองตัว ซึ่งเป็นประเภท const void* ทั้งคู่ ซึ่งชี้ไปที่องค์ประกอบที่กำลังเปรียบเทียบ ฟังก์ชันควรส่งคืนจำนวนเต็มน้อยกว่า เท่ากับ หรือมากกว่า 0 ขึ้นอยู่กับว่าควรจัดเรียงองค์ประกอบแรกก่อน ตำแหน่งเดียวกัน หรือหลังองค์ประกอบที่สองตามลำดับ
qsort ทำงานอย่างไรใน C
เดอะ qsort() ฟังก์ชันทำงานในลักษณะต่อไปนี้:
บันทึก: ที่นี่เรากำลังพิจารณา int arr[] = {5, 2, 8, 3, 1, 9};
1: ในขั้นต้น ฟังก์ชัน qsort จะถูกเรียกใช้ด้วยพารามิเตอร์ต่อไปนี้:
qsort ( อร๊าย , 6 , ขนาดของ ( นานาชาติ ) , การเปรียบเทียบ_ฟังก์ชัน ) ;โดยที่ arr คือตัวชี้ไปยังอาร์เรย์ 6 คือจำนวนองค์ประกอบในอาร์เรย์ sizeof(int) คือขนาดของแต่ละองค์ประกอบในอาร์เรย์ และ comparison_function คือฟังก์ชันที่กำหนดลำดับการจัดเรียงองค์ประกอบ
2: ฟังก์ชัน qsort เลือกองค์ประกอบเดือย สมมติว่าเลือก 3 เป็นเดือย
3: ฟังก์ชัน qsort แบ่งอาร์เรย์ออกเป็นสองอาร์เรย์ย่อย: {2, 1} และ {5, 8, 9} อาร์เรย์ย่อยแรกประกอบด้วยองค์ประกอบที่น้อยกว่าหรือเท่ากับเดือย และอาร์เรย์ย่อยที่สองมีองค์ประกอบที่มากกว่าเดือย
4: ฟังก์ชัน qsort เรียกใช้ตัวเองซ้ำในแต่ละอาร์เรย์ย่อย
5: ฟังก์ชัน qsort เลือก pivots สำหรับแต่ละอาร์เรย์ย่อย สมมติว่าเลือก 1 และ 8 เป็นเดือย
6: ฟังก์ชัน qsort แบ่งพาร์ติชันแต่ละอาร์เรย์ย่อยออกเป็นสองอาร์เรย์ย่อย และเรียกใช้ตัวเองซ้ำในแต่ละอาร์เรย์ย่อยเหล่านี้
7: ฟังก์ชัน qsort จะรวมอาร์เรย์ย่อยที่เรียงลำดับกลับเป็นอาร์เรย์ที่จัดเรียงรายการเดียว: {1, 2} และ {5, 8, 9} กลายเป็น {1, 2, 5, 8, 9}
8: อาร์เรย์ที่เรียงลำดับทั้งหมดจะถูกส่งกลับ
การใช้ qsort ในการเขียนโปรแกรม C
รหัสต่อไปนี้แสดงการใช้งานของ qsort ฟังก์ชันในการเขียนโปรแกรมภาษาซี
#รวม#รวม
นานาชาติ เปรียบเทียบ ( คอสต์ เป็นโมฆะ * ก1 , คอสต์ เป็นโมฆะ * ข1 )
{
กลับ ( * ( นานาชาติ * ) ก1 - * ( นานาชาติ * ) ข1 ) ;
}
นานาชาติ หลัก ( )
{
นานาชาติ ฉัน = 0 , ในหนึ่ง = 6 ;
นานาชาติ อาร์เรย์ [ ] = { 5 , 2 , 8 , 3 , 1 , 9 } ;
qsort ( อาร์เรย์ , ในหนึ่ง , ขนาดของ ( นานาชาติ ) , เปรียบเทียบ ) ;
พิมพ์ฉ ( 'องค์ประกอบที่เรียงลำดับของอาร์เรย์โดยใช้ qsort() คือ: ' ) ;
สำหรับ ( ฉัน = 0 ; ฉัน < ในหนึ่ง ; ฉัน ++ ) {
พิมพ์ฉ ( '%d' , อาร์เรย์ [ ฉัน ] ) ; }
กลับ 0 ;
}
ในโค้ดข้างต้น ขั้นแรกให้สร้างฟังก์ชันการเปรียบเทียบด้วยพารามิเตอร์สองตัว ก1 และ ข1 . จากนั้นการดำเนินการจะเริ่มต้นจาก main() ในหลัก เราเริ่มต้นตัวแปรจำนวนเต็มสองตัวเป็น i=0 และ num=6 จากนั้นเราจะประกาศอาร์เรย์ที่มีองค์ประกอบ 6 รายการเป็น {5, 2, 8, 3, 1, 9} . หลังจากนี้ qsort() มีสามพารามิเตอร์ของประเภทอาร์เรย์ พารามิเตอร์ num บอกองค์ประกอบทั้งหมดของอาร์เรย์ ขนาดของ(int) หมายถึงขนาดรวมของอาร์เรย์ และการเปรียบเทียบใช้เพื่อเปรียบเทียบองค์ประกอบอาร์เรย์ทีละรายการ จากนั้นพิมพ์อาร์เรย์ที่เรียงลำดับโดยใช้ พิมพ์f() ฟังก์ชันในภาษาซี
เอาต์พุต
บทสรุป
qsort เป็นฟังก์ชันที่มีประสิทธิภาพในการเขียนโปรแกรมภาษาซีสำหรับการเรียงลำดับอาร์เรย์ทุกประเภท ใช้อัลกอริทึม Quicksort เพื่อเรียงลำดับองค์ประกอบจากน้อยไปหามากหรือมากไปหาน้อยตามฟังก์ชันการเปรียบเทียบ คำแนะนำข้างต้นแสดงวิธีง่ายๆ ในการใช้ qsort ในการเขียนโปรแกรม C ด้วยการทำงานทีละขั้นตอนของ qsort อัลกอริทึม