moved compare to common; changed size_t to uint32
This commit is contained in:
parent
35488b55cd
commit
60b0bd4f02
18
common.h
18
common.h
@ -1,9 +1,23 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
// custom swap function
|
// 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;
|
*a = *b;
|
||||||
*b = temp;
|
*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;
|
||||||
}
|
}
|
26
main.cpp
26
main.cpp
@ -15,25 +15,11 @@
|
|||||||
// - fix randomized select
|
// - fix randomized select
|
||||||
// - use custom swap for just pointer swapping (check difference)
|
// - 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)
|
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");
|
||||||
std::vector<size_t> numbers = readFromFile("testdata");
|
std::vector<uint32_t > numbers = readFromFile("testdata");
|
||||||
std::cout << "just read " << numbers.size() << " values" << std::endl;
|
std::cout << "just read " << numbers.size() << " values" << std::endl;
|
||||||
Timing::getInstance()->stopRecord("init");
|
Timing::getInstance()->stopRecord("init");
|
||||||
|
|
||||||
@ -45,7 +31,7 @@ int main(int argc, char** argv)
|
|||||||
return 1;
|
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;
|
std::cout << "idx median = " << idxMed << " of " << numbers.size() << std::endl;
|
||||||
|
|
||||||
// vollständige Sortierung mit Quicksort und Ausgabe des mittleren Elements
|
// 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!
|
//size_t* array[numbers.size()]; // invalid c++ -> non-constant expression!
|
||||||
//std::copy(numbers.begin(), numbers.end(), array);
|
//std::copy(numbers.begin(), numbers.end(), array);
|
||||||
//size_t* tmp = numbers.data(); // c++11 returns pointer to first elem
|
//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);
|
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), compare);
|
std::qsort(array, numbers.size(), sizeof(size_t), compare);
|
||||||
@ -76,7 +62,7 @@ int main(int argc, char** argv)
|
|||||||
|
|
||||||
// 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 + 1) << std::endl;
|
std::cout << "randomized select: " << getRandomizedSelectMedian(numbers, 0, numbers.size() - 1, idxMed + 1) << std::endl;
|
||||||
Timing::getInstance()->stopRecord("randomized select");
|
Timing::getInstance()->stopRecord("randomized select");
|
||||||
|
|
||||||
// ein weiterer Median - Algorithmus aus der Literatur - implemented with std::vector
|
// 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");
|
Timing::getInstance()->stopRecord("vector median of medians");
|
||||||
|
|
||||||
// ein weiterer Median - Algorithmus aus der Literatur - realized with array
|
// 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");
|
Timing::getInstance()->startRecord("array median of medians");
|
||||||
std::cout << "array median of medians: " << getMedianOfMedians(array, 0, numbers.size() - 1, idxMed + 1) << std::endl;
|
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
|
// noch ein ein weiterer Median - Algorithmus weil wir so cool sind
|
||||||
Timing::getInstance()->startRecord("wirth");
|
Timing::getInstance()->startRecord("wirth");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user