क्यों मर्ज क्रमबद्ध का मर्ज () फ़ंक्शन एक सशर्त दूसरे पाश है?

वोट
1
merge1(int low, int high, int S[], U[]) 
{ 
    int k = (high - low + 1)/2
    for q (from low to high) U[q] = S[q]
    int j = low 
    int p = low 
    int i = low + k 

    while (j <= low + k - 1) and (i <= high) do 
    { 
        if ( U[j] <= U[i] ) 
        {
            S[p] := U[j] 
            j := j+1
        } 
        else 
        { 
            S[p] := U[i] 
            i := i+1 
        } 
        p := p+1 
    } 

    if (j <= low + k - 1) 
    { 
        for q from p to high do 
        { 
            S[q] := U[j] 
            j := j+1 
        } 
    }
}


merge_sort1(int low, int high, int S[], U[]) 
{ 
    if low < high 
    { 
        int k := (high - low + 1)/2 
        merge_sort1(low, low+k-1, S, U) 
        merge_sort1(low+k, high, S, U) 
        merge1(low, high, S, U) 
    } 
}

तो, मूल रूप से, यह मेरा व्याख्यान नोट्स पर है। मैं यह काफी सामान्य रूप में संशय है लेकिन मैं इसे का सबसे बड़ा हिस्सा समझते हैं। भाग - क्या मुझे समझ नहीं आता अगर (1 j <= कम + k) की जरूरत है। ऐसा लगता है कि यह जाँच करता है कि क्या कोई तत्व छोड़ बाएं हिस्से में हैं। कि यहां तक ​​कि संभव है जब mergesorting है?

24/04/2010 को 00:28
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
2

जब दो क्रमबद्ध सूचियों विलय (उन्हें कॉल leftऔर right, आप एक आइटम ले रहे हैं और में जोड़ने से रखने के लिए) resultसूची, जब तक आप या तो में आइटम से बाहर चलाने leftया rightसूची। यह पहली द्वारा किया जाता है whileपाश। अब आप परिणाम सूची में बाईं या दाईं सूची में शेष तत्वों को जोड़ने की जरूरत है। वहाँ दो विकल्प हैं:

  • छोड़ दिया सूची तत्वों से बाहर है, और सही सूची अभी भी कुछ नहीं है। जिस तरह से कोड यहाँ लिखा है, हम, कुछ करने की ज़रूरत नहीं है क्योंकि के अंत करते Sसरणी पहले से ही में पिछले तत्व शामिल हैं rightसूची।

  • सही सूची तत्वों से बाहर है, और छोड़ दिया सूची अभी भी कुछ नहीं है। फिर हम के अंत तक शेष तत्व नकल S। यह क्या है ifके अंत में merge1करता है।


अपने प्रश्न के बारे में अगर यह कोड "बुरा" है: कोड सही है, लेकिन मैं कुछ परिवर्तन इसे और अधिक पठनीय बनाने के लिए होगा:

  • वर्णनात्मक चर नाम।
  • मध्य जो अलग करती पासिंग leftऔर rightसूचियों में merge1होने यह पुनर्गणना के बजाय।
24/04/2010 को 00:45
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more