From 60b0bd4f02c0c0446336d67ab85b6d4843c15d06 Mon Sep 17 00:00:00 2001 From: incredibleLeitman Date: Sat, 17 Oct 2020 00:27:51 +0200 Subject: [PATCH] moved compare to common; changed size_t to uint32 --- common.h | 18 ++++++++++++++++-- main.cpp | 26 ++++++-------------------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/common.h b/common.h index ee0ebdb..240570c 100644 --- a/common.h +++ b/common.h @@ -1,9 +1,23 @@ #pragma once // custom swap function -void swap(size_t* a, size_t* b) +void swap(uint32_t* a, uint32_t* b) { - size_t temp = *a; + uint32_t temp = *a; *a = *b; *b = temp; +} + +// comparator function used by qsort +int compare(const void* a, const void* b) +{ + // TODO: check why this does not return the same results??? + //return (*(uint32_t*)a - *(uint32_t*)b); + //return (int)(*(int*)a - *(int*)b); + //return (int)(*(const int*)a - *(const int*)b); + uint32_t arg1 = *static_cast(a); + uint32_t arg2 = *static_cast(b); + if (arg1 < arg2) return -1; + if (arg1 > arg2) return 1; + return 0; } \ No newline at end of file diff --git a/main.cpp b/main.cpp index a0030dc..4aced30 100644 --- a/main.cpp +++ b/main.cpp @@ -15,25 +15,11 @@ // - fix randomized select // - use custom swap for just pointer swapping (check difference) -// 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(a); - size_t arg2 = *static_cast(b); - if (arg1 < arg2) return -1; - if (arg1 > arg2) return 1; - return 0; -} - int main(int argc, char** argv) { // read test values from input file Timing::getInstance()->startRecord("init"); - std::vector numbers = readFromFile("testdata"); + std::vector numbers = readFromFile("testdata"); std::cout << "just read " << numbers.size() << " values" << std::endl; Timing::getInstance()->stopRecord("init"); @@ -45,7 +31,7 @@ int main(int argc, char** argv) return 1; } - size_t idxMed = (numbers.size() - 1) / 2; + uint32_t idxMed = (numbers.size() - 1) / 2; std::cout << "idx median = " << idxMed << " of " << numbers.size() << std::endl; // vollständige Sortierung mit Quicksort und Ausgabe des mittleren Elements @@ -60,7 +46,7 @@ int main(int argc, char** argv) //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 + uint32_t* array = new uint32_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), compare); @@ -76,7 +62,7 @@ int main(int argc, char** argv) // vorgestellter Randomzized - Select rekursiv implementiert Timing::getInstance()->startRecord("randomized select"); - std::cout << "randomized select: " << randomizedSelect(numbers, 0, numbers.size() - 1, idxMed + 1) << std::endl; + std::cout << "randomized select: " << getRandomizedSelectMedian(numbers, 0, numbers.size() - 1, idxMed + 1) << std::endl; Timing::getInstance()->stopRecord("randomized select"); // ein weiterer Median - Algorithmus aus der Literatur - implemented with std::vector @@ -85,10 +71,10 @@ int main(int argc, char** argv) Timing::getInstance()->stopRecord("vector median of medians"); // ein weiterer Median - Algorithmus aus der Literatur - realized with array - std::copy(numbers.begin(), numbers.end(), array); + /*std::copy(numbers.begin(), numbers.end(), array); Timing::getInstance()->startRecord("array median of medians"); std::cout << "array median of medians: " << getMedianOfMedians(array, 0, numbers.size() - 1, idxMed + 1) << std::endl; - Timing::getInstance()->stopRecord("array median of medians"); + Timing::getInstance()->stopRecord("array median of medians");*/ // noch ein ein weiterer Median - Algorithmus weil wir so cool sind Timing::getInstance()->startRecord("wirth");