void quicksort3( const IT1& first1, const IT1& last1, const IT2& first2, const IT2& last2, const IT3& first3, const IT3& last3) { typedef typename std::iterator_traits<IT1>::difference_type DT; DT DT1 = OrdinalTraits<DT>::one(); if(last1-first1 > DT1) { IT1 pivot = getPivot(first1, last1); pivot = partition3(first1, last1, first2, last2, first3, last3, pivot); quicksort3(first1, pivot, first2, first2+(pivot-first1), first3, first3+(pivot-first1)); quicksort3(pivot+1, last1, first2+(pivot-first1)+1, last2, first3+(pivot-first1)+1, last3); } }
static void timer() { int i; for (i = 1000000; i < 100000001; i *= 2) { int size = sizeof(int) * i; int *tmp = malloc(size); if (tmp == NULL ) { fatal("tmp malloc failed."); } int *data = malloc(size); if (data == NULL ) { fatal("data malloc failed."); } random(tmp, i); memcpy(data, tmp, size); unsigned long count = 0; clock_t start = clock(); quicksort1(data, i); timeinfo("quicksort1", i, count, clock() - start); memcpy(data, tmp, size); start = clock(); quicksort2(data, i); timeinfo("quicksort2", i, count, clock() - start); memcpy(data, tmp, size); start = clock(); quicksort3(data, i); timeinfo("quicksort3", i, count, clock() - start); memcpy(data, tmp, size); start = clock(); quicksort4(data, i); timeinfo("quicksort4", i, count, clock() - start); memcpy(data, tmp, size); start = clock(); quicksort5(data, i); timeinfo("quicksort5", i, count, clock() - start); memcpy(data, tmp, size); start = clock(); quicksort6(data, i); timeinfo("quicksort6", i, count, clock() - start); memcpy(data, tmp, size); start = clock(); quicksort7(data, i); timeinfo("quicksort7", i, count, clock() - start); free(data); free(tmp); printf("\n"); } }