SORU
16 Ocak 2011, Pazar


Performans değer dizisi olan vs std::sort?

Scott Meyers göre, Etkili STL kitabında - madde 46. std::sort içi olması nedeniyle std::qsort den 670% daha hızlı olduğunu iddia etti. Kendim test ettim, ve bu değer dizisi daha hızlı olduğunu gördüm :( ! Kimse bana bu tuhaf davranışlarını açıklamaya yardımcı olabilir mi?

#include <iostream>
#include <vector>
#include <algorithm>

#include <cstdlib>
#include <ctime>
#include <cstdio>

const size_t LARGE_SIZE = 100000;

struct rnd {
    int operator()() {
        return rand() % LARGE_SIZE;
    }
};

int comp( const void* a, const void* b ) {
    return ( *( int* )a - *( int* )b );
}

int main() {
    int ary[LARGE_SIZE];
    int ary_copy[LARGE_SIZE];
    // generate random data
    std::generate( ary, ary   LARGE_SIZE, rnd() );
    std::copy( ary, ary   LARGE_SIZE, ary_copy );
    // get time
    std::time_t start = std::clock();
    // perform quick sort C using function pointer
    std::qsort( ary, LARGE_SIZE, sizeof( int ), comp );
    std::cout << "C quick-sort time elapsed: " << static_cast<double>( clock() - start ) / CLOCKS_PER_SEC << "\n";
    // get time again
    start = std::clock();
    // perform quick sort C   using function object
    std::sort( ary_copy, ary_copy   LARGE_SIZE );
    std::cout << "C   quick-sort time elapsed: " << static_cast<double>( clock() - start ) / CLOCKS_PER_SEC << "\n";
}

Bu benim sonuç:

C quick-sort time elapsed: 0.061
C   quick-sort time elapsed: 0.086
Press any key to continue . . .

Güncelleme

Etkili STL 3rd Edition ( 2001 )
STL ile bölüm 7 Programlama
Madde 46: algoritma parametreleri olarak işlevleri yerine işlev nesneleri Düşünün.

Saygılarımızla,

CEVAP
16 Ocak 2011, Pazar


::std saat() zamanlama uygun bir saat değil. Platforma özel yüksek çözünürlüklü zamanlayıcı, Windows Yüksek Performans Sayacı gibi kullanmalısınız. Daha da önemlisi, saat çağrısı() ilk olarak, metin zaman dahildir. konsola çıktı. Bu kesinlikle test geçersiz kılar. Buna ek olarak, tüm iyileştirmeleri ile derlenmiş emin olun.

Son olarak, ben kopyalanan ve yapıştırılan kod ve std için değer dizisi için 0.016 ve 0.008 var::sıralama.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ASUS

    ASUS

    22 EKİM 2005
  • B4ROK

    B4ROK

    1 EKİM 2008
  • Codecourse

    Codecourse

    3 ŞUBAT 2009