Я работал над вычислением продолжительности этих алгоритмов сортировки. Я зацикливал все методы сортировки в 2000 раз, а затем делят общую длительность на 2000, чтобы получить правильное значение для продолжительности. Проблема в; он не показывает точное значение времени, которое принимает отдельные части методов сортировки. Я имею в виду, что переменная duration
показывает увеличивающиеся значения через потоки программы. Например, для N = 10000
, insertionSort()
дает 0,000635, mergeSort()
дает 0,00836 и heapSort()
дает 0,018485, и когда я меняю их порядок, duration
все еще идет по программе, независимо от типа алгоритма. Я пытался давать разные значения продолжительности для каждого процесса, но это не сработало. Может ли кто-нибудь помочь мне понять эту проблему или какие-то другие измерения времени?Длительность алгоритмов сортировки C++
Извините, если это глупая проблема и для моей плохой грамматики.
int main(){
srand(time(NULL));
int N, duration;
cout << endl << "N : ";
cin >> N; // N is array sze.
cout << endl;
// a4 would be the buffer array (for calculating proper duration).
int *a1 = new int[N];
int *a2 = new int[N];
int *a3 = new int[N];
int *a4 = new int[N];
cout << endl << "Unsorted array : " << endl;
for (int i = 0; i < N; i++){
a4[i] = rand() % 100;
cout << a4[i] << " ";
}
/*------------------------------------------------------------------------------*/
cout << endl << endl <<"Sorting with Insertion Sort, please wait..." << endl;
for(int i = 0; i < 2000; i++){
a1 = a4;
duration = clock();
insertionSort(a1, N - 1);
duration += clock() - duration;
}
cout << endl << "Insertion sort : " << endl;
print(a1, N);
cout << endl << endl << "Approximate duration for Insertion Sort : ";
cout << (double) (duration/2000)/CLOCKS_PER_SEC;
cout << " s." << endl;
/*------------------------------------------------------------------------------*/
cout << endl << endl << "Sorting with Merge Sort, please wait..." << endl;
for(int i = 0; i < 2000; i++){
a2 = a4;
duration = clock();
mergeSort(a2, 0, N - 1);
duration += clock() - duration;
}
cout << endl << "Merge sort : " << endl;
print(a2, N);
cout << endl << endl << "Approximate duration for Merge Sort : ";
cout << (double) (duration/2000)/CLOCKS_PER_SEC;
cout << " s."<< endl << endl;
/*------------------------------------------------------------------------------*/
cout << endl << endl << "Sorting with Heap Sort, please wait..." << endl;
for(int i = 0; i < 2000; i++){
a3 = a4;
duration = clock();
heapSort(a3, N);
duration += clock() - duration;
}
cout << endl << "Heap sort : " << endl;
print(a3, N);
cout << endl << endl << "Approximate duration for Heap Sort : ";
cout << (double) (duration/2000)/CLOCKS_PER_SEC;
cout << " s."<< endl << endl;
return 0;
}
Помните, что порядок исходных данных также влияет на производительность сортировки. Вам не только нужно много раз выполнять сортировку по одному набору данных, вам также потребуется выполнить сортировку по множеству наборов данных, чтобы получить более точный или общий рейтинг производительности. Также имейте в виду, что на время могут влиять другие приложения, запущенные на вашем компьютере. –