Skip to content

Commit df5a9ae

Browse files
Add Odd-Even Sort
1 parent 4dd198b commit df5a9ae

File tree

4 files changed

+37
-0
lines changed

4 files changed

+37
-0
lines changed

src/SortAlgorithms.cpp

+30
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,36 @@ int algo::bitonicSort(std::vector<Sortable>& sortElements, int timeSleep, const
336336

337337
return numOfComparisons;
338338
}
339+
/**
340+
* @brief Odd-Even/Brick sort
341+
* @author @Niko-the-Useless
342+
* @param sortElements Main array containing the elements to be sorted
343+
* @param timeSleep Time to wait between iterations in miliseconds
344+
* @param interrupt Bool to stop the sort process
345+
* @return Number of comparisons made
346+
*/
347+
348+
int algo::oddEvenSort(std::vector<Sortable>& sortElements, int timeSleep, const std::atomic<bool>& interrupt){
349+
int numOfComparisons = 0;
350+
351+
for(int n=1;n<=sortElements.size()-2;n=n+2){ //bubble sort for odd elements
352+
if (interrupt){return numOfComparisons;}
353+
if(sortElements[n].value>sortElements[n+1].value){
354+
algoUtils::swap(sortElements, timeSleep, sortElements[n], sortElements[n+1]);
355+
}
356+
numOfComparisons++;
357+
}
358+
359+
for(int n=0;n<=sortElements.size()-2;n=n+2){ //bubble sort for even elements
360+
if (interrupt){return numOfComparisons;}
361+
if(sortElements[n].value>sortElements[n+1].value){
362+
algoUtils::swap(sortElements, timeSleep, sortElements[n], sortElements[n+1]);
363+
}
364+
numOfComparisons++;
365+
}
366+
367+
return numOfComparisons;
368+
}
339369

340370
//
341371
// ────────────────────────────────────────────────────────── II ──────────

src/SortAlgorithms.h

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ namespace algo {
1111
int cocktailSort(std::vector<Sortable>& sortElements, int timeSleep, const std::atomic<bool>& interrupt);
1212
int bogoSort(std::vector<Sortable>& sortElements, int timeSleep, const std::atomic<bool>& interrupt);
1313
int bitonicSort(std::vector<Sortable>& sortElements, int timeSleep, const std::atomic<bool>& interrupt);
14+
int oddEvenSort(std::vector<Sortable>& sortElements, int timeSleep, const std::atomic<bool>& interrupt);
1415
}
1516

1617
namespace algoUtils {

src/SortController.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,9 @@ void SortController::_startSort(int sortType) {
121121
case 6:
122122
numOfComparisons += algo::bitonicSort(_sortElements, _timeSleep, _interrupt);
123123
break;
124+
case 7:
125+
numOfComparisons += algo::oddEvenSort(_sortElements, _timeSleep, _interrupt);
126+
break;
124127
default:
125128
return;
126129
}

src/Utils.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ std::string Utils::getSortType(int sortType) {
3232
case 6:
3333
return "Bitonic sort";
3434

35+
case 7:
36+
return "Odd-Even sort";
37+
3538
default:
3639
return kNoSort;
3740
}

0 commit comments

Comments
 (0)