Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

C qsort() กับ C++ sort()


ที่นี่เราจะมาดูกันว่าอะไรคือความแตกต่างระหว่าง qsort() ใน C และ sort() ใน C++

C มีฟังก์ชัน qsort() ที่สามารถใช้ในการเรียงลำดับอาร์เรย์ อาร์กิวเมนต์และไวยากรณ์ของฟังก์ชันมีลักษณะดังนี้

void qsort(void *base, size_t num, size_t size, int (*comparator) (const void*, const void*));

ฟังก์ชันนี้ใช้ที่อยู่ฐานของอาร์เรย์นั้น จำนวนองค์ประกอบของอาร์เรย์นั้น ขนาดของแต่ละรายการในอาร์เรย์และฟังก์ชันตัวเปรียบเทียบ

C++ มีฟังก์ชัน sort() มีอยู่ใน C ++ STL อาร์กิวเมนต์และไวยากรณ์เป็นเหมือนด้านล่าง

void sort(T first, T last, Compare c);

ที่นี่ไม่รับประกันว่าจะรักษาลำดับขององค์ประกอบซ้ำ เพื่อจุดประสงค์นั้น เราสามารถใช้ stable_sort ที่จัดเตรียมโดย C++ STL

ความแตกต่างระหว่าง qsort() และ sort()

qsort() ใน C sort() ใน C++
ใช้อัลกอริธึม Quicksort ใช้การแนะนำเบื้องต้น นี่คืออัลกอริธึมการเรียงลำดับแบบไฮบริด การใช้งานที่แตกต่างกันที่นี่ใช้อัลกอริธึมที่แตกต่างกัน GNU C++ STL ใช้การเรียงลำดับแบบไฮบริดสามส่วน Introsort, Quicksort และ Insertion Sort.
มาตรฐาน C ไม่ได้พูดถึงความซับซ้อนของอัลกอริทึมการจัดเรียงนี้ ในกรณีนี้ความซับซ้อนคือ O(n logn) ในกรณีที่เลวร้ายที่สุดใน C++11 sort() เวอร์ชันก่อนหน้าบางตัว sort() ใช้ O(n2) ในกรณีที่เลวร้ายที่สุด และในกรณีทั่วไป พวกเขาใช้ O(nlogn)
เวลาดำเนินการของการเรียงลำดับนี้มากกว่า thansort() เวลาทำงานน้อยกว่า qsort()
qsort() ไม่ยืดหยุ่นสำหรับข้อมูลประเภทต่างๆ sort() มีความยืดหยุ่น ซึ่งสามารถจัดเรียง C arrays, C++ vectors, C++ deques และคอนเทนเนอร์อื่นๆ ได้เช่นกัน
การจัดเรียงนี้ไม่ปลอดภัยสำหรับประเภทอื่น ใช้พอยน์เตอร์โมฆะที่ไม่ปลอดภัยในการเข้าถึงข้อมูล เทคนิคการเรียงลำดับนี้ปลอดภัยกว่า ไม่ต้องการตัวชี้โมฆะที่ไม่ปลอดภัยในการเข้าถึงข้อมูล