Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
creator_it
1 / 1 / 0
Регистрация: 20.11.2014
Сообщений: 17
#1

АТД "MyVector" - методы сортировки выбора и слияния - C++

02.07.2015, 21:42. Просмотров 241. Ответов 0
Метки нет (Все метки)

Подскажите, что не так в методах сортировки выбора и слияния? Уточнение: в методе выбора (sort_case) - хз, полный; в слиянии(sort_merge и merge), вроде как происходит зацикливание, причина не понятна( P.S Все остальное нормально работает ... Спасибо заранее!!! И да, это не совсем АТД, но препода не переубедишь

вот код :

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
main.cpp
 
#include <iostream>
#include "interface.h"
#include <vector>
using namespace std;
 
int
main()
{
    vector <int> s;
    s.push_back(1);
    s.push_back(17);
    s.push_back(-4);
    s.push_back(25);
    s.push_back(2);
    s.push_back(12);
    s.push_back(9);
    s.push_back(4);
    s.push_back(42);
    s.push_back(22);
    MyVector <int> object(s);
    system("pause");
    return 0;
}
 
interface.h
 
#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
 
using namespace std;
 
template <typename Type>
class MyVector : public std::vector<Type>
{
public:
    MyVector(vector <Type> str) : std::vector<Type>(str)
    {
        //sort_merge(0, size());
        sort_shell();
        print();
        rand_fill();
        sort_shell();
        print();
        //sort_case();
    }
 
    ~MyVector()
    {
        cout << endl << " Object to destroyed!!!";
    }
 
    void print() // output to the screen
    {
        int i = 0;
        auto it = begin();
        while (it != end())
        {
            if (i > 0)
                cout << " ";
            cout << *it;
            ++it;
            ++i;
        }
        cout << endl;
    }
 
    void rand_fill() // vector fills randomly numbers
    {
        srand(time(0));
        for (auto it = begin(); it != end(); it++)
        {
            *it = rand() % 100000;
        }
        cout << endl;
    }
 
    int min(int it) // finds the minimum number of vector
    {
        int *min = 2147483647;
        auto s;
        for (; it != end(); it++)
        {
            if (*it < *min) {
                *min = *it;
                s = it;
            }
        }
        return s;
    }
 
    void sort_shell() // method by Shell
    {
        int step = size() / 2;
        while (step > 0)
        {
            for (int i = 0; i < (size() - step); i++)
            {
                int j = i;
                while (j >= 0 && at(j) > at(j + step))
                {
                    int temp = at(j);
                    at(j) = at(j + step);
                    at(j + step) = temp;
                    j--;
                }
            }
            step = step / 2;
        }
    }
    
    void merge(int first, int last)
    {
        int middle, start, final, j;
        int *mas = new int[100];
        middle = (first + last) / 2;
        start = first; 
        final = middle + 1;
        for (j = first; j < last; j++)
        if ((start <= middle) && ((final > last) || (at(start) < at(final))))
        {
            mas[j] = at(start);
            start++;
        }
        else
        {
            mas[j] = at(final);
            final++;
        }
        for (j = first; j < last; j++) 
            at(j) = mas[j];
        delete []mas;
    };
 
    void sort_merge(int first, int last)
    {
        {
            if (first < last)
            {
                sort_merge(first, (first + last) / 2); 
                sort_merge((first + last) / 2 + 1, last);
                merge(first, last);
            }
        }
    };
 
    void sort_case()
    {
        for (auto it = begin(); it != end(); it++)
        {
            swap((begin(), min(it));
        }
    }
    void find_direct();
    void find_fibonachi();
};

задание на всякий случай :
1. На базе шаблона класса vector разработать (спроектировать (см приложение А), реализовать и провести тестовые испытания) АТД «my_vector» путем добавления следующих методов (алгоритмов):
 вывод вектора на экран;
 заполнение вектора с помощью датчика случайных чисел;
 sort1, sort2, , sort3, реализующие операции сортировки массива указанными в варианте задания методами;
 find 1, find2, реализующие операции поиска элемента в упорядоченном массиве указанным в варианте задания методами (см таблицу 4.1.1).
Таблица 4.1.1 – Варианты заданий по методам сортировки и поиска
№ вар Метод сортировки 1 Метод сортировки 2 Метод сортировки 3 Метод поиска 1 Метод поиска 2
Нчт Метод «пузырька» Метод вставок Сортировка подсчетом Двоичный Интерполяционный
Чт Метод выбора Сортировка Шелла Сортировка слиянием Прямой Фибоначчи
Для тестирования эффективности алгоритмов интерфейс разрабатываемого АТД должен включать следующие дополнительные операции:
- опрос числа выполненных сравнений;
- опрос числа выполненных обменов.
2. Реализовать АТД «my_vector» в виде класса C++.
3. Разработать наборы тестов для тестирования операций над массивами в разрабатываемых приложениях.
4. Выполнить отладку и тестирование отдельных операций АТД с помощью меню операций.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2015, 21:42
Я подобрал для вас темы с готовыми решениями и ответами на вопрос АТД "MyVector" - методы сортировки выбора и слияния (C++):

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Написать функцию выбора пунктов меню стрелками "вверх" "вниз" - C++
Доброго всем времени суток.Пожалуйста подскажите как мне справиться с моей проблемой.Нужно написать функцию выбора пунктов меню стрелками...

АТД список. Заменить меньшую часть списка символом "#" - C++
Здравствуйте!! Подскажите пожалуйста!! Нужна заменить меньшую часть (половину) списка символом &quot;#&quot; ! Например: Есть...

АТД "Однонаправленный список" с элементами типа char - C++
помогите пожалуйста) АТД − однонаправленный список с элементами типа char. Дополнительно перегрузить следующие операции: + –...

Двумерный массив: Добавить методы "ДайЗначениеЯчейки", "УстановиЗначениеЯчейки" - C++
Нужно добавить методы ДайЗначениеЯчейки(индексРяда, индексКолонки), УстановиЗначениеЯчейки(индексРяда, индексКолонки, значение). ...

Задание по ООП: создание АТД "Массив" - C++
Такое задание на листке бумаги написать ADT массива, то что я принес преподаватель откатл и сказал что много чего не достает и ещё и не ...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2015, 21:42
Привет! Вот еще темы с ответами:

Поиск дискриминанта, АТД "Квадратное уравнение" - C++
нужно создать АТД квадратное уравнение, с выводом корней и самого уравнения на экран. Вывод уравнения, вроде, проходит нормально, а вот...

Создание АТД "Стек" на основе массива - C++
&quot;Реализуйте АТД “стек” на основе массива фиксированного размера для элементов, являющихся односвязными списками целых чисел (т.е., стек...

Программа по созданию АТД "Фотоаппарат" - C++
Нужно создать АТД - фотоаппарат. Поля структуры: Название, Количество кадров в заряженной пленке, Номер текущего кадра. Реализовать...

Описать шаблон класса АТД: "Участник очереди на печать издания: фамилия, телефон, количество страниц" - C++
Шаблоны классов с++. Нужно доделать задачу. 1. Описать шаблон класса АТД: &quot;Участник очереди на печать издания: фамилия, телефон,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru