Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _SCL_SECURE_NO_WARNINGS
- #include <iostream>
- #include <cstdio>
- struct stud
- {
- char name[10];
- int age;
- };
- bool less(const stud& a, const stud& b)
- {
- return a.age < b.age;
- }
- template <typename T>
- class Array
- {
- public:
- Array() : array(0), size(0), capacity(0) {}
- ~Array() { delete[] array; }
- void append(const T& value);
- void print();
- template <typename Comarator>
- void qsort(int left, int right, Comarator less);
- private:
- T* array;
- size_t size;
- size_t capacity;
- template <typename Comarator>
- int partition(int left, int right, Comarator less);
- };
- template <typename T>
- template <typename Compare>
- int Array<T>::partition(int left, int right, Compare less)
- {
- int i = left - 1;
- for (int j = 1; j < right - 1;++j)
- {
- if (less(array[j], array[right - 1]))
- {
- i++;
- std::swap(array[j], array[i]);
- }
- }
- std::swap(array[i + 1], array[right - 1]);
- return i + 1;
- }
- template <typename T>
- template <typename Compare>
- void Array<T>::qsort(int left, int right, Compare less)
- {
- if (left + 1 >= right)
- return;
- int q = partition(left, right, less);
- qsort(left, q, less);
- qsort(q + 1, right, less);
- }
- template <typename T>
- void Array<T>::append(const T &value)
- {
- if (size == capacity)
- {
- if (capacity)
- capacity *= 2;
- else
- capacity = 1;
- T* buffer = new T[capacity];
- std::copy(array, array + size, buffer);
- delete[] array;
- array = buffer;
- }
- array[size++] = value;
- }
- template <typename T>
- void Array<T>::print()
- {
- for (size_t i = 0; i < size; i++)
- std::cout << array[i] << '\n';
- }
- template <>
- void Array<stud>::print()
- {
- for (size_t i = 0; i < size; i++)
- std::cout << array[i].name << ' ' << array[i].age << '\n';
- }
- int main()
- {
- Array <stud> arr;
- stud a;
- for (int i = 0; i < 3; i++)
- {
- std::cin >> a.name >> a.age;
- arr.append(a);
- }
- arr.qsort(0, 3, less);
- arr.print();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment