示例#1
0
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);
    }
}
示例#2
0
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");
	}
}