2012-02-17 17 views

cevap

12

Ne yaptığınızı biliyorsanız, bunun kötü bir uygulama olduğunu sanmıyorum. Bazı durumlarda, verimlilik için okunabilirliği feda edersiniz. İki tane daha dizi oluşturursanız muhtemelen daha açık, ancak diziler ve işaretçiler üzerinde sıkı bir kavrayışınız varsa, neden ekstra bellek ayırıyorsunuz?

+6

Diğer taraftan, ne yaptığınızı bilmiyorsanız C dilinde bir şey yapmak kötü bir uygulamadır. –

+0

@WilliamPursell :) "printf" yi değişken parametreler olmadan kullanmazsanız. Bu oldukça kolay. –

+2

@LuchianGrigore, printf ("% s \ n"); – ugoren

2

O (birleştirme tür olarak) bu tür durumda bir dizi kullanmak gayet güzel. Dizinin boyutu yığın için çok büyük olmadıkça malloc çağrısı gereksizdir.

11

Kesinlikle hayır! C'deki tüm programlama noktası, bu düzgün işaretçi hileleri yapabiliyor!

Do not Ancak bu mergesort böylece yine bir yardımcı diziyi Malloc gerekecektir INPLACE değildir. Doğru işaretçi hileleri yaparsanız, sadece bir kez malloc ve yeniden kullanabilirsiniz.

2

Genellikle birleştirme ile sıralama özgün girdi tarafından işgal belleğe birleştirme sonucunu koymak istiyorum. Eğer öyleyse, o zaman gerekir: ondan

  • birleştirme olduğu

    • sıralama
    • bir yeni tahsis edilmiş tampon içine dizinin "düşük" yarısını kopya iki yarısı, "üst" yarım bırakmak "üst" yarım ve ekstra tampon, büyük dizinin "dip" ine.

    Bu şekilde, sadece yarısında girdi büyüklüğü kadar ekstra bellek tahsis etmek gerekir. Bunu en baştan bir kez bile yapabilir ve yapacağınız bütün birleşmeler için aynı arabayı çalışma alanı olarak yeniden kullanabilirsiniz.

  • 1

    Hayır, kötü değil ve aslında bu ilk etapta C kullanarak tek nedenlerinden biri olduğunu iddia ediyorum. Verilerinizin israflı kopyalarını, aynı verileri biraz farklı bir şekilde ele almanız gerektiğinde, yüksek düzeyli kod dillerinin en büyük maliyetlerinden birini zaten kullanmaya başladıysanız. Ayrıca, kodunuzun yapması gereken hata miktarını büyük ölçüde artırdınız (tahsis başarısız olabileceğinden) ve C'deki hata işleme işlemi biraz "verbose" olma eğilimindeyken (buna göre) net karmaşıklık maliyeti çok daha kötüdür Bir alt diziye yerinde erişmenin küçük karmaşıklık maliyetinden daha fazla.

    İlgili konular