moved compare to common; changed size_t to uint32

This commit is contained in:
incredibleLeitman 2020-10-17 00:27:51 +02:00
parent 35488b55cd
commit 60b0bd4f02
2 changed files with 22 additions and 22 deletions

View File

@ -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<const uint32_t*>(a);
uint32_t arg2 = *static_cast<const uint32_t*>(b);
if (arg1 < arg2) return -1;
if (arg1 > arg2) return 1;
return 0;
}

View File

@ -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<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)
{
// read test values from input file
Timing::getInstance()->startRecord("init");
std::vector<size_t> numbers = readFromFile("testdata");
std::vector<uint32_t > 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");