added implementation for median after quicksort and std nth element
This commit is contained in:
parent
6b60d6e44b
commit
f072f162b2
40
MedianQuicksort.h
Normal file
40
MedianQuicksort.h
Normal file
@ -0,0 +1,40 @@
|
||||
#pragma once
|
||||
|
||||
int partition(std::vector<size_t>& values, int left, int right) {
|
||||
int pivotIndex = left + (right - left) / 2;
|
||||
int pivotValue = values[pivotIndex];
|
||||
int i = left, j = right;
|
||||
int temp;
|
||||
while (i <= j) {
|
||||
while (values[i] < pivotValue) {
|
||||
i++;
|
||||
}
|
||||
while (values[j] > pivotValue) {
|
||||
j--;
|
||||
}
|
||||
if (i <= j) {
|
||||
temp = values[i];
|
||||
values[i] = values[j];
|
||||
values[j] = temp;
|
||||
i++;
|
||||
j--;
|
||||
}
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
void quicksort(std::vector<size_t>& values, int left, int right) {
|
||||
if (left < right) {
|
||||
int pivotIndex = partition(values, left, right);
|
||||
quicksort(values, left, pivotIndex - 1);
|
||||
quicksort(values, pivotIndex, right);
|
||||
}
|
||||
}
|
||||
|
||||
size_t getMedian(std::vector<size_t> values) {
|
||||
//std::qsort(numbers); // only takes array param
|
||||
quicksort(values, 0, values.size() - 1);
|
||||
size_t idxMed = values.size() / 2;
|
||||
if (idxMed - (int)idxMed > 0) idxMed++;
|
||||
return values[idxMed];
|
||||
}
|
17
main.cpp
17
main.cpp
@ -1,7 +1,9 @@
|
||||
#include <iostream>
|
||||
#include <algorithm> // std::nth_element
|
||||
|
||||
#include "fileHandler.h"
|
||||
#include "Timing.h"
|
||||
#include "MedianQuicksort.h"
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
Timing::getInstance()->startRecord("init");
|
||||
@ -9,8 +11,19 @@ int main(int argc, char** argv) {
|
||||
std::cout << "read " << numbers.size() << " values" << std::endl;
|
||||
Timing::getInstance()->stopRecord("init");
|
||||
|
||||
Timing::getInstance()->startRecord("test");
|
||||
Timing::getInstance()->stopRecord("test");
|
||||
// vollständige Sortierung mit Quicksort und Ausgabe des mittleren Elements
|
||||
Timing::getInstance()->startRecord("quicksort");
|
||||
std::cout << "quicksort median: " << getMedian(numbers) << std::endl;
|
||||
Timing::getInstance()->stopRecord("quicksort");
|
||||
|
||||
// Verwendung des C++ STL function templates nth_element
|
||||
Timing::getInstance()->startRecord("nth element");
|
||||
std::nth_element(numbers.begin(), numbers.begin() + numbers.size() / 2, numbers.end());
|
||||
size_t idxMed = numbers.size() / 2;
|
||||
if (idxMed - (int)idxMed > 0) idxMed++;
|
||||
std::cout << "nth element: " << numbers[idxMed] << std::endl;
|
||||
Timing::getInstance()->stopRecord("nth element");
|
||||
|
||||
//Timing::getInstance()->getResults();
|
||||
Timing::getInstance()->print();
|
||||
return 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user