/
Mityao
/
Lab7_Part1
Обзор
Документация
Войти
/
Mityao
/
Lab7_Part1
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Lab7_part1/Header.h
183 строки
4 KB
Supercarplay
Исправлен кодобразование
24 мар 2026, 15:59
24 мар 2026, 15:59
5642247
Код
Авторство
О чём код?
#pragma once #include <iostream> #include <string> #include <sstream> #include <vector> using namespace std; double ChekerNumber(int variant) { string line; double x; while (getline(cin, line)) { std::stringstream ss(line); if (ss >> x && ss.eof() && (x >= 0 && x <= variant)) { return x; break; } else { cout << "Введены неверные значения! Введите ещё раз: "; } } } double ChekerNumber() { string line; double x; while (getline(cin, line)) { std::stringstream ss(line); if (ss >> x && ss.eof()) { return x; break; } else { cout << "Введены неверные значения! Введите ещё раз: "; } } } int sort(vector<int>& vec) { int count=0; for (int i = 0; i < vec.size(); i++) { for (int j = 0; j < vec.size() - i - 1; j++) { if (vec[j] > vec[j + 1]) { swap(vec[j], vec[j + 1]); count++; } } } return count; } void InsertSort(vector<int>& vec) { int l = 0; for (int i = 1; i < vec.size(); i++) { for (int j = i - 1; j >= 0; j--) { if (vec[j] > vec[j+1]) { swap(vec[j], vec[j+1]); } } } } void QuickSort(vector<int>& vec, int l, int r) { if (l >= r) return; int m=vec[l + (r - l) / 2]; int first = l; int last = r; while (first<last) { while (vec[first] < m && first <= last) first++; while (vec[last] > m && first <= last) last--; if (first <= last) { swap(vec[first], vec[last]); first ++; last--; } } QuickSort(vec, l, last); QuickSort(vec, first, r); } void Merge(vector<int>& vec, int l, int m, int r) { int i, j, k; int n1 = m - l + 1; int n2 = r - m; vector<int> L(n1), R(n2); // Копируем элементы в разные отдельные массивы for (i = 0; i < n1; i++) { L[i] = vec[l + i]; } for (j = 0; j < n2; j++) { R[j] = vec[m + 1 + j]; } i = j = 0; k = l; // Заполняем основной массив while (i < n1 && j < n2) { //Если первый элемент левого массива меньше правого, то он идёт на первое место основого массива if (L[i] <= R[j]) { vec[k] = L[i]; i++; } else { vec[k] = R[j]; j++; } k++; } //Проверка на то что в правом и левом массиве ничего нету. Если есть, то доложить в конец while(i<n1){ vec[k] = L[i]; i++; k++; } while (j < n2) { vec[k] = R[j]; j++; k++; } } void MergeSort(vector<int>& vec, int l, int r) { if (l < r) { int m = l + (r - l) / 2; MergeSort(vec, l, m); MergeSort(vec, m + 1, r); Merge(vec, l, m, r); } } void heapify(vector<int>& vec, int size, int x) { int Larg = x; int right_luz = 2 * x + 2; int left_luz = 2 * x + 1; if (right_luz<size && vec[right_luz]>vec[Larg]) { Larg = right_luz; } if (left_luz<size && vec[left_luz]>vec[Larg]) { Larg = left_luz; } if(Larg!=x){ swap(vec[x], vec[Larg]); heapify(vec, size, Larg); } } void HeapSort(vector<int>& vec) { int n = vec.size(); for (int i = n/2-1; i >= 0; i--) { heapify(vec, n, i); } for (int i = n - 1; i >= 0; i--) { swap(vec[0], vec[i]); heapify(vec, i, 0); } } void findLi(vector<int> vec,int x) { int size = vec.size(); for (int it = 0; it < size; it++) { if (vec[it] == x) { cout << "\nОбъект находится на " << it+1 << " месте"; } } } void find(vector<int>& vec, int x) { sort(vec); int l = 0; int r = vec.size()-1; while (l < r) { int m = l + (r - l) / 2; if (vec[m] >= x) { r = m; } else { l = m + 1; } } if (x==vec[l]) { cout << "\nОбъект находится на " << l+1 << " месте"; } }