handling only for odd datasets; added quicksort for array
This commit is contained in:
parent
7c6258c3f4
commit
68ce4f7887
34
main.cpp
34
main.cpp
@ -14,16 +14,42 @@ int main(int argc, char** argv) {
|
||||
std::cout << "just read " << numbers.size() << " values" << std::endl;
|
||||
Timing::getInstance()->stopRecord("init");
|
||||
|
||||
// index of median -> if odd count +1
|
||||
size_t idxMed = numbers.size() / 2;
|
||||
// index of median
|
||||
if (numbers.size() % 2 == 0)
|
||||
{
|
||||
std::cout << "TODO: define how to handly even datasets" << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
size_t idxMed = (numbers.size() - 1) / 2;
|
||||
std::cout << "median = " << idxMed << std::endl;
|
||||
if (idxMed - (int)idxMed > 0) idxMed++;
|
||||
|
||||
// vollständige Sortierung mit Quicksort und Ausgabe des mittleren Elements
|
||||
Timing::getInstance()->startRecord("quicksort");
|
||||
std::cout << "quicksort median: " << getQuicksortMedian(numbers, idxMed) << std::endl;
|
||||
//std::cout << "quicksort median: " << getQuicksortMedian(numbers, idxMed) << std::endl;
|
||||
Timing::getInstance()->stopRecord("quicksort");
|
||||
|
||||
// using std quicksort for array
|
||||
// TODO: decide how the fuck to create a dynamic size array from vector...
|
||||
//size_t* array = new size_t[numbers.size]; // create and fill new array
|
||||
//size_t* array = &numbers[0]; // just a pointer to first element as array
|
||||
//size_t* array[numbers.size()]; // invalid c++ -> non-constant expression!
|
||||
//std::copy(numbers.begin(), numbers.end(), array);
|
||||
//size_t* tmp = numbers.data(); // c++11 returns pointer to first elem
|
||||
size_t* array = new size_t[999999]; // create and fill new array
|
||||
std::copy(numbers.begin(), numbers.end(), array);
|
||||
Timing::getInstance()->startRecord("array quicksort");
|
||||
std::qsort(array, numbers.size(), sizeof(size_t), [](const void* a, const void* 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;
|
||||
});
|
||||
std::cout << "array quicksort median: " << array[idxMed] << std::endl;
|
||||
Timing::getInstance()->stopRecord("array quicksort");
|
||||
|
||||
// vorgestellter Randomzized - Select rekursiv implementiert
|
||||
Timing::getInstance()->startRecord("randomized select");
|
||||
std::cout << "randomized select: " << randomizedSelect(numbers, 0, numbers.size() - 1, idxMed) << std::endl;
|
||||
|
Loading…
x
Reference in New Issue
Block a user