DTL

Sorting

Using sorting algorithms with DTL

Bubble sort

#include "vector.hpp"
#include "bubble_sort.hpp"
#include <iostream>

int main() {
  dby::vector<int> vec = { 9, 4, 0, 1, 3, 8, 2, 7, 5, 6 };

  // Increasing
  std::cout << "INCREASING: ";
  dby::BubbleSort::sort<int>(vec);
  vec.for_each([](int num){ std::cout << num << ' '; });

  // Non-increasing
  std::cout << "\nNON-INCREASING: ";
  dby::BubbleSort::sort<int>(vec, [](int a, int b){ return a < b; });
  vec.for_each([](int num){ std::cout << num << ' '; });
  
  return 0;
}

Selection sort

#include "vector.hpp"
#include "selection_sort.hpp"
#include <iostream>

int main() {
  dby::vector<int> vec = { 9, 4, 0, 1, 3, 8, 2, 7, 5, 6 };

  // Increasing
  std::cout << "INCREASING: ";
  dby::SelectionSort::sort<int>(vec);
  vec.for_each([](int num){ std::cout << num << ' '; });

  // Non-increasing
  std::cout << "\nNON-INCREASING: ";
  dby::SelectionSort::sort<int>(vec, [](int a, int b){ return a < b; });
  vec.for_each([](int num){ std::cout << num << ' '; });
  
  return 0;
}

Insertion sort

#include "vector.hpp"
#include "insertion_sort.hpp"
#include <iostream>

int main() {
  dby::vector<int> vec = { 9, 4, 0, 1, 3, 8, 2, 7, 5, 6 };

  // Increasing
  std::cout << "INCREASING: ";
  dby::InsertionSort::sort<int>(vec);
  vec.for_each([](int num){ std::cout << num << ' '; });

  // Non-increasing
  std::cout << "\nNON-INCREASING: ";
  dby::InsertionSort::sort<int>(vec, [](int a, int b){ return a < b; });
  vec.for_each([](int num){ std::cout << num << ' '; });
  
  return 0;
}

Shell sort

#include "vector.hpp"
#include "shell_sort.hpp"
#include <iostream>

int main() {
  dby::vector<int> vec = { 9, 4, 0, 1, 3, 8, 2, 7, 5, 6 };

  // Increasing
  std::cout << "INCREASING: ";
  dby::ShellSort::sort<int>(vec);
  vec.for_each([](int num){ std::cout << num << ' '; });

  // Non-increasing
  std::cout << "\nNON-INCREASING: ";
  dby::ShellSort::sort<int>(vec, [](int a, int b){ return a < b; });
  vec.for_each([](int num){ std::cout << num << ' '; });
  
  return 0;
}

Comb sort

#include "vector.hpp"
#include "comb_sort.hpp"
#include <iostream>

int main() {
  dby::vector<int> vec = { 9, 4, 0, 1, 3, 8, 2, 7, 5, 6 };

  // Increasing
  std::cout << "INCREASING: ";
  dby::CombSort::sort<int>(vec);
  vec.for_each([](int num){ std::cout << num << ' '; });

  // Non-increasing
  std::cout << "\nNON-INCREASING: ";
  dby::CombSort::sort<int>(vec, [](int a, int b){ return a < b; });
  vec.for_each([](int num){ std::cout << num << ' '; });
  
  return 0;
}

Merge sort

#include "vector.hpp"
#include "merge_sort.hpp"
#include <iostream>

int main() {
  dby::vector<int> vec = { 9, 4, 0, 1, 3, 8, 2, 7, 5, 6 };

  // Increasing
  std::cout << "INCREASING: ";
  dby::MergeSort::sort<int>(vec);
  vec.for_each([](int num){ std::cout << num << ' '; });

  // Non-increasing
  std::cout << "\nNON-INCREASING: ";
  dby::MergeSort::sort<int>(vec, [](int a, int b){ return a < b; });
  vec.for_each([](int num){ std::cout << num << ' '; });
  
  return 0;
}

Quick sort

#include "vector.hpp"
#include "quick_sort.hpp"
#include <iostream>

int main() {
  srand(time(0));

  dby::vector<int> vec1 = { 9, 4, 0, 1, 3, 8, 2, 7, 5, 6 };
  dby::vector<int> vec2 = { 9, 4, 0, 1, 3, 8, 2, 7, 5, 6 };
  dby::vector<int> vec3 = { 9, 4, 0, 1, 3, 8, 2, 7, 5, 6 };

  // Normal quicksort
  std::cout << "NORMAL QUICKSORT: ";
  dby::QuickSort::sort<int>(vec1); 
  vec1.for_each([](int num){ std::cout << num << ' '; });

  // Randomized quicksort
  std::cout << "\nRANDOMIZED QUICKSORT: ";
  dby::QuickSort::sort<int>(vec2, dby::quick_sort_type::randomized);
  vec2.for_each([](int num){ std::cout << num << ' '; });

  // Median of three quicksort
  std::cout << "\nMEDIAN OF THREE QUICKSORT: ";
  dby::QuickSort::sort<int>(vec3, dby::quick_sort_type::median_of_three, [](int a, int b){ return a < b; });
  vec3.for_each([](int num){ std::cout << num << ' '; });
  
  return 0;
}

Heap sort

#include "vector.hpp"
#include "heap_sort.hpp"
#include <iostream>

int main() {
  dby::vector<int> vec = { 9, 4, 0, 1, 3, 8, 2, 7, 5, 6 };

  // Increasing
  std::cout << "INCREASING: ";
  dby::HeapSort::sort<int>(vec); 
  vec.for_each([](int num){ std::cout << num << ' '; });

  // Non-increasing
  std::cout << "\nNON-INCREASING: ";
  dby::HeapSort::sort<int>(vec, [](int a, int b){ return a < b; });
  vec.for_each([](int num){ std::cout << num << ' '; });
  
  return 0;
}

Tim sort

#include "vector.hpp"
#include "tim_sort.hpp"
#include <iostream>

int main() {
  dby::vector<int> vec = { 9, 4, 0, 1, 3, 8, 2, 7, 5, 6 };

  // Increasing
  std::cout << "INCREASING: ";
  dby::TimSort::sort<int>(vec); 
  vec.for_each([](int num){ std::cout << num << ' '; });

  // Non-increasing
  std::cout << "\nNON-INCREASING: ";
  dby::TimSort::sort<int>(vec, [](int a, int b){ return a < b; });
  vec.for_each([](int num){ std::cout << num << ' '; });
  
  return 0;
}

Intro sort

#include "vector.hpp"
#include "intro_sort.hpp"
#include <iostream>

int main() {
  dby::vector<int> vec = { 9, 4, 0, 1, 3, 8, 2, 7, 5, 6 };

  // Increasing
  std::cout << "INCREASING: ";
  dby::IntroSort::sort<int>(vec); 
  vec.for_each([](int num){ std::cout << num << ' '; });

  // Non-increasing
  std::cout << "\nNON-INCREASING: ";
  dby::IntroSort::sort<int>(vec, [](int a, int b){ return a < b; });
  vec.for_each([](int num){ std::cout << num << ' '; });
  
  return 0;
}