Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <utility>
- #include <random>
- #include <time.h>
- using namespace std;
- // изначальные алгоритмы, нумерация в массиве от 1
- /*void delFirstMetod(vector<int> & x, int & n, int key) {
- int i = 1;
- while (i <= n) {
- if (x[i] == key) {
- for (int j = i; j < n; ++j)
- x[j] = x[j + 1];
- n = n - 1;
- }
- else
- i++;
- }
- }
- void delFirstMetod(vector<int>& x, int & n, int key) {
- int j = 1;
- for (int i = 1; i <= n; ++i) {
- x[j] = x[i];
- if (x[i] != key)
- j++;
- }
- n = j;
- }*/
- // нумерция в массиве от 0
- pair<int, int> delFirstMetod(vector<int>& x, int& n, int key) {
- int comparsionCount = 0, movingCount = 0;
- int i = 0;
- while (i < n) {
- comparsionCount++;
- if (x[i] == key) {
- for (int j = i; j < n - 1; ++j) {
- x[j] = x[j + 1];
- movingCount++;
- }
- n = n - 1;
- }
- else
- i++;
- }
- return { comparsionCount, movingCount };
- }
- pair<int, int> delOtherMetod(vector<int>& x, int& n, int key) {
- int j = 0;
- int comparsionCount = 0, movingCount = 0;
- for (int i = 0; i < n; ++i) {
- x[j] = x[i];
- comparsionCount++, movingCount++;
- if (x[i] != key)
- j++;
- }
- n = j;
- return { comparsionCount, movingCount };
- }
- void arrayFill(vector<int> & a, int size, int mod) {
- for (int i = 0; i < size; ++i) {
- int n = 0;
- if(mod != -1)
- n = rand() % mod;
- else
- n = rand();
- a.push_back(n);
- }
- }
- vector<int> arrayCreate(int size) {
- vector<int> a;
- arrayFill(a, size, -1);
- return a;
- }
- vector<int> arrayCreate(int size, int mod) {
- vector<int> a;
- arrayFill(a, size, mod);
- return a;
- }
- void arrayPrint(vector<int>& a, int size) {
- for (int i = 0; i < size; ++i)
- cout << a[i] << " ";
- cout << '\n';
- }
- int main() {
- srand(time(0));
- setlocale(LC_ALL, "Rus");
- cout << "-------n = 10-------\n";
- int n1 = 10;
- int n2 = n1;
- int mod = 100; // модуль случайных чисел
- vector<int> a1 = arrayCreate(n1, mod);
- vector<int> a2 = a1;
- arrayPrint(a1, n1);
- cout << "Введите элемент который вы хотите удалить:\n";
- int keyFirst;
- cin >> keyFirst;
- pair<int, int> resultsFirst = delFirstMetod(a1, n1, keyFirst);
- cout << "Массив без удаленного элемента:\n";
- arrayPrint(a1, n1);
- cout << "Количество сравнений в первом варианте алгоритма:\n";
- cout << resultsFirst.first << '\n';
- cout << "Количество перемещений в первом варианте алгоритма:\n";
- cout << resultsFirst.second << '\n';
- pair<int, int> resultsOther = delOtherMetod(a2, n2, keyFirst);
- cout << "Количество сравнений во втором варианте алгоритма:\n";
- cout << resultsOther.first << '\n';
- cout << "Количество перемещений во втором варианте алгоритма:\n";
- cout << resultsOther.second << '\n';
- cout << "-------n = 100------\n";
- n1 = 100;
- n2 = n1;
- a1 = arrayCreate(n1, mod);
- a2 = a1;
- arrayPrint(a1, n1);
- cout << "Введите элемент который вы хотите удалить:\n";
- cin >> keyFirst;
- resultsFirst = delFirstMetod(a1, n1, keyFirst);
- cout << "Массив без удаленного элемента:\n";
- arrayPrint(a1, n1);
- cout << "Количество сравнений в первом варианте алгоритма:\n";
- cout << resultsFirst.first << '\n';
- cout << "Количество перемещений в первом варианте алгоритма:\n";
- cout << resultsFirst.second << '\n';
- resultsOther = delOtherMetod(a2, n2, keyFirst);
- cout << "Количество сравнений во втором варианте алгоритма:\n";
- cout << resultsOther.first << '\n';
- cout << "Количество перемещений во втором варианте алгоритма:\n";
- cout << resultsOther.second << '\n';
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement