在Mac上編寫一個在C++中演示不同排序算法的程序。我發現了兩個quicksort實現,qsort和qsort_b。qsort_b和qsort
第一個當然是老式的,隨處可見的qsort。但有qsort_b,它採用一個塊而不是一個函數。這裏是我的代碼:
#include <cstdlib>
#include <cstdio>
#include <iostream>
#include <cstdio>
#include <ctime>
#define DATA 1000000
using namespace std;
int compare(const void* a, const void* b)
{
return *(int*)a - *(int*)b;
}
int main(int argc, char *argv[])
{
int* array = new int[DATA];
srand(time(0));
for (int i = 0 ; i < DATA ; ++ i)
{
array[i] = rand() % 2147483647;
}
clock_t begin = clock();
qsort(array, DATA, sizeof(array[0]), compare);
//qsort_b(array, DATA, sizeof(array[0]), ^(const void* a, const void* b) { return *(int*)a - *(int*)b; });
clock_t end = clock();
cout << "Time it takes to sort " << DATA << " integers with quicksort: " << end - begin;
}
在這裏我看到很大的速度差異,是什麼導致所有的差異。就我的理解,塊是用於並行處理的,在這種情況下不會比函數更快。沒有什麼可以並行處理的,是嗎?編程:heapsort_b(),mergesort_b()和qsort_b()例程就像沒有_b後綴的相應例程,期望compar回調是塊指針而不是函數指針。 (FROM BSD MAN PAGE)
編輯:速度差。 DATA爲1000000時,qsort在146832 ns內完成,qsort_b在127391 ns內完成。考慮到它快10%左右,這是一個相當大的差異。
編輯:我編輯的代碼,使其有可能具有更大的整數數組。我個人最大的測試結果是1億整數,28136278(28秒)與23870078(24秒)。對我來說這是一個相當大的差異。
你可以詳細說明「大速度差異」 –
@KarthikT我不確定測量單位,但我認爲它是納秒級。用qsort,它是146832,用qsort_b,它是127391.用DATA是1000000. –
我用更大的數據測試了它,100000000個整數。這是28136278(28s)與23870078(24s)。對我來說這是一個相當大的差異。 –