मुझे लगता है कि stdlib में अच्छा पुराना qsort फ़ंक्शन स्थिर नहीं है, क्योंकि मैन पेज इसके बारे में कुछ भी नहीं कहता है। इस समारोह के बारे में मैं बात कर रहा हूँ है:मानक लाइब्रेरी qsort को स्थिर करना?
#include <stdlib.h>
void qsort(void *base, size_t nmemb, size_t size,
int(*compar)(const void *, const void *));
मुझे लगता है कि अगर मैं अपने तुलना समारोह बदल भी जो मैं तुलना कर रहा हूं कि का पता शामिल करना है, यह स्थिर हो जाएगा। क्या वो सही है?
उदाहरण के लिए:
int compareFoos(const void* pA, const void *pB) {
Foo *pFooA = (Foo*) pA;
Foo *pFooB = (Foo*) pB;
if(pFooA->id < pFooB->id) {
return -1;
} else if(pFooA->id > pFooB->id) {
return 1;
} else if(pA < pB) {
return -1;
} else if(pB > pA) {
return 1;
} else {
return 0;
}
}
मुझे समझ में नहीं आता कि आप पॉइंटर्स की तुलना क्यों करेंगे। और स्थिर से मेरा क्या मतलब है (मेरी अज्ञानता क्षमा करें)। शायद आप अपने प्रश्न में विस्तार कर सकते हैं। – jmatthias
स्थिर होने का मतलब है कि आइटम आइटम बी के बराबर तुलना करता है, और शुरुआत में सरणी में बी से पहले आता है, यह * अभी भी * क्रमबद्ध सरणी में बी से पहले आता है। सर्कल को सॉर्ट करने में कला की अवधि, और पते की तुलना करने के हैक का कारण। बहुत साफ़। – dmckee
बहुत साफ विचार, @ डीएमकी, लेकिन दुर्भाग्य से स्थिर नहीं है क्योंकि twk पते को शुरू करने के बजाए वर्तमान पते का उपयोग कर रहा है :-) – paxdiablo