Форум программистов, компьютерный форум CyberForum.ru

Сортировки: пять методов на выбор в одной программе - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Удалить из первой последовательности каждый символ, принадлежащий и второй http://www.cyberforum.ru/cpp-beginners/thread1135239.html
Даны 2 символьные последовательности. Удалить из первой последовательности каждый символ, принадлежащий и второй последовательности.Распечатать заданные и образованную последовательности. То есть нужно удалить совместные символы. Мне на этом форуме написали программу но с ошибками помогите исправить. #include <iostream> #include <string> int main() { std::string txt("dfcc df"),...
C++ Ошибка: член класса QLineEdit ошибка: 'class QLineEdit' has no member named 'str' a=ui->lineEdit->str.toAscii().data(); подскажите что не так. Заранее спасибо. http://www.cyberforum.ru/cpp-beginners/thread1135205.html
Как инициализировать Vector <class>? C++
Нужно реализовать такую задачу: Дан список учеников в формате Имя Оценка1 Оценка2 Оценка3 Надо отсортировать по убыванию суммы оценок. Поправьте меня, если я иду слишком сложным путем. Я создал класс class pupil {
Как обрезать строку типа wchar_t* до определенного символа? C++
собственно вопрос в названии тему, запнулся казалось бы на самом простом, некогда не любил работу со строками...
C++ WinAPI с чего начать? http://www.cyberforum.ru/cpp-beginners/thread1135176.html
Знаю, что тема уже поднималась и тем не менее. С чего начать изучать именно winAPI Например, мой друг написал программу, позволяющую щелкать все время в одном месте и иногда в другом (для игры какой-то. Программа не имеет граф. Интерфейса, но он применяет winAPI . Тоже хочу, но не знаю с чего начать. Сам с++ владею на уровне ооп. Какие книги посоветуете??? #include <cstdio> #include...
C++ Вычислить сумму всех чисел Фибоначчи, которые не превосходят 1000 Дорогие программисты, помогите мне с такой вот задачкой, никак не могу решить.Написать на с++ вычислить сумму всех чисел фибоначчи которые не превосходят 1000 подробнее

Показать сообщение отдельно
kiborgdelto
70 / 72 / 27
Регистрация: 23.03.2011
Сообщений: 141
09.04.2014, 01:53     Сортировки: пять методов на выбор в одной программе
задолбал, там было всего исправить 2 строки и сменить имя у массива

вот рабочий ПРАВИЛЬНЫЙ код, с выбором метода сортировки и с правильным использовании методов сортировки, надёрганных с интернета(в основном данного форума кроме сортировки слиянием), в ранее выложенном вырианте не было выбора метода сортировки, кроме того в быстрой сортировке в этом коде нужно передавать массив и индекс последнего элемента, а не количество элементов из-за чего появляется левый элемент массива

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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
 #include <iostream>
#include <time.h>
using namespace std;
 
int opred_mas(int* Arr, int size);    
template< class T > void selectSort(T* arr, int size);
template< class T > void bubbleSort(T* arr, int size);
template< class T > void insertSort(T* a, int size);
template<class T> void quickSortR(T* a, long N);
template<class T> void merge(T* a, int l, int r);
 
int main()
{
    setlocale(0,"");
    int k=10;     //константа размера массива
    cout<<"Введите количество элементов массива\n";
    cin >>k;
 
    int *Arr1;      //указатель обьявляется, для использования динамического массива
    Arr1=new int [k];     //создание динамического массива
       
    cout<<"Полученный массив\n";
    opred_mas(Arr1,k);
    unsigned int H;
    cout<<"Нажмите 1, если вы хотите провести сортироку методом выбора"<<endl;
    cout<<"Нажмите 2, если вы хотите провести сортироку методом пузырька"<<endl;
    cout<<"Нажмите 3, если вы хотите провести сортироку методом вставок"<<endl;
    cout<<"Нажмите 4, если вы хотите провести сортироку методом быстрой сортировки"<<endl;
    cout<<"Нажмите 5, если вы хотите провести сортироку методом слияния "<<endl;
    cout<<"нажмите 0, если вы хотите выйти"<<endl;
    cin>>H;
    
    switch(H)
    {
        case 1:
            selectSort(Arr1,k);
            break;
        case 2:
            bubbleSort(Arr1,k);
            break;
        case 3:
            insertSort(Arr1,k);
            break;
        case 4:
            quickSortR(Arr1,k-1);
            break;
        case 5:
            merge(Arr1,0,k-1);
            break;
        default:
            exit(0);
    }
    
    
    cout<<endl;
    for(int i=0;i<k;++i)  cout<<Arr1[i]<<" ";
    system("pause");
}
 
int opred_mas(int* Arr, int size)       //функция задания элементов массива
{
    //srand(time(NULL));
    for(int i=0;i<size;++i)
    {
        Arr[i]=rand()%100-50;
        cout<<Arr[i]<<" ";
    }
    cout<<endl;
    return 0; 
}
 
template< class T > void selectSort(T* arr, int size) // сортировка выбором
{
    T tmp;
    for(int i = 0; i < size; ++i) // i - номер текущего шага
    { 
        int pos = i; 
        tmp = arr[i];
        for(int j = i + 1; j < size; ++j) // цикл выбора наименьшего элемента
        {
            if (arr[j] < tmp) 
           {
               pos = j; 
               tmp = arr[j]; 
           }
        }
        arr[pos] = arr[i]; 
        arr[i] = tmp; // меняем местами наименьший с a[i]
    }
}
 
template< class T > void bubbleSort(T* arr, int size)// пузырьком
{
    T tmp;
 
    for(int i = 0; i < size - 1; ++i) // i - номер прохода
    {            
        for(int j = 0; j < size - 1; ++j) // внутренний цикл прохода
        {     
            if (arr[j + 1] < arr[j]) 
            {
                tmp = arr[j + 1]; 
                arr[j + 1] = arr[j]; 
                arr[j] = tmp;
            }
        }
    }
}
 
template< class T > void insertSort(T* a, int size) // вставками
{
    T tmp;
    for (int i = 1, j; i < size; ++i) // цикл проходов, i - номер прохода
    {
        tmp = a[i]; 
        for (j = i - 1; j >= 0 && a[j] > tmp; --j) // поиск места элемента в готовой последовательности 
            a[j + 1] = a[j];    // сдвигаем элемент направо, пока не дошли
        a[j + 1] = tmp; // место найдено, вставить элемент    
    }
}
 
template<class T> void quickSortR(T* a, long N) { // быстрая
// На входе - массив a[], a[N] - его последний элемент.
 
  long i = 0, j = N;        // поставить указатели на исходные места
  T temp, p;
 
  p = a[ N>>1 ];        // центральный элемент
 
  // процедура разделения
  do {
    while ( a[i] < p ) i++;
    while ( a[j] > p ) j--;
 
    if (i <= j) {
      temp = a[i]; a[i] = a[j]; a[j] = temp;
      i++; j--;
    }
  } while ( i<=j );
 
  // рекурсивные вызовы, если есть, что сортировать 
  if ( j > 0 ) quickSortR(a, j);
  if ( N > i ) quickSortR(a+i, N-i);
}
 
template<class T> void merge(T* a, int l, int r) {
    if (r == l)
        return;
    if (r - l == 1) { 
        if (a[r] < a[l])
            swap(a[r], a[l]);
        return;
    }
    int m = (r + l) / 2;
    merge(a,l, m);
    merge(a,m + 1, r);
    T *buf=new T[r];
    int xl = l;
    int xr = m + 1;
    int cur = 0;
    while (r - l + 1 != cur) {
        if (xl > m)
            buf[cur++] = a[xr++];
        else if (xr > r)
            buf[cur++] = a[xl++];
        else if (a[xl] > a[xr])
            buf[cur++] = a[xr++];
        else buf[cur++] = a[xl++];
 
    }
    for (int i = 0; i < cur; i++)
        a[i + l] = buf[i];
}
П.С. вроде бы ничего не напутал когда переделывал сортировку слиянием используя шаблон (чтобы работала с любым типом данных), но точно (проверял) она работает с типом int, остальные должны работать в теории (но не проверял)
 
Текущее время: 23:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru