moved comparator before main in function; adding std::sort (introsort)
This commit is contained in:
parent
68ce4f7887
commit
9ea381fdba
30
main.cpp
30
main.cpp
@ -7,6 +7,20 @@
|
|||||||
#include "MedianOfMedians.h"
|
#include "MedianOfMedians.h"
|
||||||
#include "RandomizedSelect.h"
|
#include "RandomizedSelect.h"
|
||||||
|
|
||||||
|
// comparator function used by qsort
|
||||||
|
int compare(const void* a, const void* b)
|
||||||
|
{
|
||||||
|
// TODO: check why this does not return the same results???
|
||||||
|
//return (*(size_t*)a - *(size_t*)b);
|
||||||
|
//return (int)(*(int*)a - *(int*)b);
|
||||||
|
//return (int)(*(const int*)a - *(const int*)b);
|
||||||
|
size_t arg1 = *static_cast<const size_t*>(a);
|
||||||
|
size_t arg2 = *static_cast<const size_t*>(b);
|
||||||
|
if (arg1 < arg2) return -1;
|
||||||
|
if (arg1 > arg2) return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char** argv) {
|
int main(int argc, char** argv) {
|
||||||
// read test values from input file
|
// read test values from input file
|
||||||
Timing::getInstance()->startRecord("init");
|
Timing::getInstance()->startRecord("init");
|
||||||
@ -39,17 +53,17 @@ int main(int argc, char** argv) {
|
|||||||
size_t* array = new size_t[999999]; // create and fill new array
|
size_t* array = new size_t[999999]; // create and fill new array
|
||||||
std::copy(numbers.begin(), numbers.end(), array);
|
std::copy(numbers.begin(), numbers.end(), array);
|
||||||
Timing::getInstance()->startRecord("array quicksort");
|
Timing::getInstance()->startRecord("array quicksort");
|
||||||
std::qsort(array, numbers.size(), sizeof(size_t), [](const void* a, const void* b)
|
std::qsort(array, numbers.size(), sizeof(size_t), compare);
|
||||||
{
|
|
||||||
size_t arg1 = *static_cast<const size_t*>(a);
|
|
||||||
size_t arg2 = *static_cast<const size_t*>(b);
|
|
||||||
if (arg1 < arg2) return -1;
|
|
||||||
if (arg1 > arg2) return 1;
|
|
||||||
return 0;
|
|
||||||
});
|
|
||||||
std::cout << "array quicksort median: " << array[idxMed] << std::endl;
|
std::cout << "array quicksort median: " << array[idxMed] << std::endl;
|
||||||
Timing::getInstance()->stopRecord("array quicksort");
|
Timing::getInstance()->stopRecord("array quicksort");
|
||||||
|
|
||||||
|
// comparison "quick" sort with std::sort (introsort)
|
||||||
|
std::copy(numbers.begin(), numbers.end(), array);
|
||||||
|
Timing::getInstance()->startRecord("array std sort");
|
||||||
|
std::sort(array, array + numbers.size());
|
||||||
|
std::cout << "array std sort median: " << array[idxMed] << std::endl;
|
||||||
|
Timing::getInstance()->stopRecord("array std sort");
|
||||||
|
|
||||||
// vorgestellter Randomzized - Select rekursiv implementiert
|
// vorgestellter Randomzized - Select rekursiv implementiert
|
||||||
Timing::getInstance()->startRecord("randomized select");
|
Timing::getInstance()->startRecord("randomized select");
|
||||||
std::cout << "randomized select: " << randomizedSelect(numbers, 0, numbers.size() - 1, idxMed) << std::endl;
|
std::cout << "randomized select: " << randomizedSelect(numbers, 0, numbers.size() - 1, idxMed) << std::endl;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user