Advertisement
Aliyahu

BubbleSort

Oct 1st, 2018
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.98 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  4. // Sort.hpp
  5. template <class T>
  6. void swap(T& v1, T& v2) {
  7.     int tmp = v1;
  8.     v1 = v2;
  9.     v2 = tmp;
  10. }
  11.  
  12. //template <class T>
  13. //using TLess = bool (const T& value1, const T& value2);
  14.  
  15. template <class T, class TLess>
  16. void BubbleSort(T* arr, int size, TLess less) {
  17.     for (int i = 0; i < size; ++i) {
  18.         for (int j = 1; j < size - i; ++j) {
  19.             if (!less(arr[j - 1], arr[j + i])) {
  20.                 swap(arr[j - 1], arr[j]);
  21.             }
  22.         }
  23.     }
  24. }
  25.  
  26. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  27. //Array
  28.  
  29. /*template <class T>
  30. class Array {
  31. public:
  32.     explicit Array(int size) { body = new T[size]; }
  33.  
  34.     Array(const Array<T>&);
  35. };
  36. */
  37.  
  38. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  39. //
  40.  
  41. bool less (const int& value1, const int& value2) {
  42.     return value1 > value2;
  43. }
  44.  
  45. struct  Point
  46. {
  47.     int X;
  48.     int Y;
  49. };
  50.  
  51. bool points_less(const Point& p1, const Point& p2) {
  52.     return p1.X != p2.X ? p1.X < p2.X : p1.Y < p2.Y;
  53. }
  54.  
  55. int dist(const Point& p1, const Point& p2) {
  56.     const int dx = p1.X - p2.X;
  57.     const int dy = p1.Y - p2.Y;
  58.     return dx * dx + dy * dy;
  59. }
  60.  
  61. class YLess {
  62. public:
  63.     YLess() = default;
  64.     YLess(Point _p0) : p0(_p0) {};
  65.     bool operator()(const Point& p1, const Point& p2) {
  66.         return dist(p1, p0) < dist(p2, p0);
  67.     }
  68. private:
  69.     Point p0 = { 0, 0 };
  70. };
  71.  
  72. int main() {
  73.     int arr[] = { 21, 7, 11, 3, 17, 6, 8, 13 };
  74.  
  75.     BubbleSort(arr, 8, less);
  76.  
  77.     Point* points = new Point[4];
  78.     points[0] = { 1, 2 };
  79.     points[1] = {2, 3};
  80.     points[2] = {0, 0};
  81.     points[3] = {1, 1};
  82.  
  83.     BubbleSort(points, 4, YLess({ 2, 2 }));
  84.  
  85.     for (int i = 0; i < 4; ++i) {
  86.         std::cout << "(" <<  points[i].X << ", " << points[i].Y << ") ";
  87.     }
  88.     delete[] points;
  89.     return 0;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement