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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Anriuser
-2 / 0 / 1
Регистрация: 18.10.2013
Сообщений: 207
31.03.2014, 21:03     Сортировки: пять методов на выбор в одной программе #1
Помогите написать програмку которая сортирует пьятьма методами на выбор 1) вставками 2) выбором 3) обменом (пузырьком) 4)быстрая сортировка 5) слиянием.
В нете все ети методы есть, но связать в одну прогу у меня не получается.

Наработки есть но на паскале а как оказалось теперь надо на С++
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2014, 21:03     Сортировки: пять методов на выбор в одной программе
Посмотрите здесь:

C++ Выбор сортировки
Ввести пять строк и из каждой строки вывести пять последних символа C++
C++ сравнительный анализ методов сортировки одномерных массивов
Напишите реализацию методов, предоставляющих доступ к данным класса. Отобразите в программе работу этих методов C++
C++ Выбор алгоритма сортировки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Anriuser
-2 / 0 / 1
Регистрация: 18.10.2013
Сообщений: 207
06.04.2014, 19:21  [ТС]     Сортировки: пять методов на выбор в одной программе #21
Я пробовал но нифига не получилось . Вот и жду помощи

Добавлено через 29 минут
Сам прикол все пишут что ето просто но никто не может сделать)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IrineK
Заблокирован
06.04.2014, 19:25     Сортировки: пять методов на выбор в одной программе #22
Цитата Сообщение от Anriuser Посмотреть сообщение
вы решите мою судьбу
Цитата Сообщение от Anriuser Посмотреть сообщение
у меня халява не пройдет
Вот если подумать, чего сам написал , то можно прийти к правильным выводам.
Newchap
4 / 4 / 1
Регистрация: 17.09.2013
Сообщений: 179
06.04.2014, 19:48     Сортировки: пять методов на выбор в одной программе #23
Anriuser, скинь код уже, пробователь.
Люди воспринимающие этот форум как центр бесплатных лаб бесят уже
Anriuser
-2 / 0 / 1
Регистрация: 18.10.2013
Сообщений: 207
08.04.2014, 13:20  [ТС]     Сортировки: пять методов на выбор в одной программе #24
IrineK кто не рискует тот не пьет шампанского :

Добавлено через 1 минуту
Код есть на паскале, но мне на С++ надо))))

Добавлено через 1 минуту
И все же я в поиске добрых людей) которые помогут)

Добавлено через 4 часа 11 минут
Но никто не помогает)

Добавлено через 13 часов 56 минут
Народ завтра буду здавать выручайте!!!)))
IrineK
08.04.2014, 13:27
  #25

Не по теме:

Цитата Сообщение от Anriuser Посмотреть сообщение
IrineK кто не рискует тот не пьет шампанского
И отчего же теперь штаны мокрые: от риска или от шампанского?

Anriuser
-2 / 0 / 1
Регистрация: 18.10.2013
Сообщений: 207
08.04.2014, 21:58  [ТС]     Сортировки: пять методов на выбор в одной программе #26
IrineK, может вы мне поможете?))))))

Добавлено через 28 минут
Хелп народ!

Добавлено через 1 час 25 минут
ПОМОГИТЕ!!!

Добавлено через 1 час 27 минут
HEEEEELP!

Добавлено через 5 часов 4 минуты
Да помогите!!
metallix
 Аватар для metallix
10 / 10 / 3
Регистрация: 07.09.2013
Сообщений: 48
08.04.2014, 22:10     Сортировки: пять методов на выбор в одной программе #27
За это время сам уже мог бы сделать.
Или скинь хотя бы что сам написал.
Anriuser
-2 / 0 / 1
Регистрация: 18.10.2013
Сообщений: 207
08.04.2014, 22:23  [ТС]     Сортировки: пять методов на выбор в одной программе #28
сейчас вам в лс скину

Добавлено через 40 секунд
СПС всем можно закрывать тему, никто н епомогает током)

Добавлено через 6 минут
сори за ошибки спешу просто
metallix
 Аватар для metallix
10 / 10 / 3
Регистрация: 07.09.2013
Сообщений: 48
08.04.2014, 22:52     Сортировки: пять методов на выбор в одной программе #29
Так уж и быть)) Что надо, надеюсь сам уже осилишь доделать)
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
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
#include <iostream>
#include <cstdlib>
 
using namespace std;
 
void bubbleSort(int *arr, int size);
void insertSort(int *arr, int size);
void selectSort(int *arr, int size);
void quickSort(int *arr, int N);
void merge(int*,int*,int,int,int);
void mergesort(int *a, int*b, int low, int high);
 
int main()
{
    int n=0;
    srand(time(NULL));
 
    cout<<"Size of array: ";
    cin>>n;
 
    int array[n];
 
    cout<<"Array: \n";
        for(int i=0;i<n;i++)
        {
            array[i]=rand()%50;
            cout<<array[i]<<" ";
        }
        cout<<"\n\n";
//---------------------------------------------------//
cout<<"Bubble Sort:\n\n";
 
bubbleSort(array,n);
    for(int i=0;i<n;i++)
        cout<<array[i]<<" ";
 
cout<<"\n\n------------------------------\n\n";
 
//---------------------------------------------------//
 
cout<<"Insert Sort:\n\n";
 
insertSort(array,n);
    for(int i=0;i<n;i++)
        cout<<array[i]<<" ";
 
cout<<"\n\n------------------------------\n\n";
 
//---------------------------------------------------//
 
cout<<"Select Sort:\n\n";
 
selectSort(array,n);
    for(int i=0;i<n;i++)
        cout<<array[i]<<" ";
 
cout<<"\n\n------------------------------\n\n";
 
//---------------------------------------------------//
 
cout<<"Quick Sort:\n\n";
 
quickSort(array,n);
    for(int i=0;i<n;i++)
        cout<<array[i]<<" ";
 
cout<<"\n\n------------------------------\n\n";
cout<<"Merge Sort:\n\n";
int num;
num = sizeof(array)/sizeof(int);
int b[num];
 
mergesort(array,b,0,num-1);
    for(int i=0; i<num; i++)
        cout<<array[i]<<" ";
cout<<"\n\n------------------------------\n\n";
 
system("pause>>null");
return 0;
}
 
 
void bubbleSort(int *arr, int size)
{
    int tmp;
 
    for(int i = 0; i < size - 1; ++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;
            }
        }
    }
}
 
void insertSort(int *arr, int size)
{
    int tmp;
    for (int i = 1, j; i < size; ++i)
    {
        tmp = arr[i];
        for (j = i - 1; j >= 0 && arr[j] > tmp; --j)
            arr[j + 1] = arr[j];
        arr[j + 1] = tmp;
    }
}
 
void selectSort(int *arr, int size)
{
    int tmp;
    for(int i = 0; i < size; ++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;
    }
}
 
void quickSort(int *a, int N)
{
  long i = 0, j = N;
  int 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 ) quickSort(a, j);
  if ( N > i ) quickSort(a+i, N-i);
}
 
void mergesort(int *a, int*b, int low, int high)
{
    int pivot;
    if(low<high)
        {
            pivot=(low+high)/2;
            mergesort(a,b,low,pivot);
            mergesort(a,b,pivot+1,high);
            merge(a,b,low,pivot,high);
        }
}
 
void merge(int *a, int *b, int low, int pivot, int high)
{
int h,i,j,k;
h=low;
i=low;
j=pivot+1;
 
while((h<=pivot)&&(j<=high))
{
    if(a[h]<=a[j])
    {
        b[i]=a[h];
        h++;
    }
    else
    {
        b[i]=a[j];
        j++;
    }
    i++;
}
if(h>pivot)
{
    for(k=j; k<=high; k++)
    {
        b[i]=a[k];
        i++;
    }
}
else
{
    for(k=h; k<=pivot; k++)
    {
        b[i]=a[k];
        i++;
    }
}
    for(k=low; k<=high; k++) a[k]=b[k];
}
Anriuser
-2 / 0 / 1
Регистрация: 18.10.2013
Сообщений: 207
08.04.2014, 23:25  [ТС]     Сортировки: пять методов на выбор в одной программе #30
Ура!!! А что там надо доделать то?)
Спасибо большое)

Добавлено через 10 минут
Не компилится(

Добавлено через 8 минут
metallix, Вы сдесь?

Добавлено через 10 минут
народ да хелп компильните прогу!
metallix
 Аватар для metallix
10 / 10 / 3
Регистрация: 07.09.2013
Сообщений: 48
08.04.2014, 23:53     Сортировки: пять методов на выбор в одной программе #31
Что именно? какие ошибки ?
Anriuser
-2 / 0 / 1
Регистрация: 18.10.2013
Сообщений: 207
09.04.2014, 00:00  [ТС]     Сортировки: пять методов на выбор в одной программе #32
int array[n];

Добавлено через 19 секунд
expected constant expression

Добавлено через 1 минуту
int b[num];
такая же ошибка
IrineK
Заблокирован
09.04.2014, 00:06     Сортировки: пять методов на выбор в одной программе #33
metallix,
ТС нужно эти массивы создавать динамически - у него компилятор требует.
Anriuser
-2 / 0 / 1
Регистрация: 18.10.2013
Сообщений: 207
09.04.2014, 00:10  [ТС]     Сортировки: пять методов на выбор в одной программе #34
О_о IrineK мне еще надо отчет по етому сделать скажите если можете как)
IrineK
Заблокирован
09.04.2014, 00:20     Сортировки: пять методов на выбор в одной программе #35
Anriuser
-2 / 0 / 1
Регистрация: 18.10.2013
Сообщений: 207
09.04.2014, 00:36  [ТС]     Сортировки: пять методов на выбор в одной программе #36
IrineK, ну я пошутил)

Добавлено через 5 минут
IrineK, ну а если можете то серьезно попрошу вас поправить код

Добавлено через 7 минут
IrineK, аааа ну где вы(
kiborgdelto
70 / 72 / 27
Регистрация: 23.03.2011
Сообщений: 141
09.04.2014, 00:41     Сортировки: пять методов на выбор в одной программе #37
замените все строки с объявлением массивов, подобные этой
C++
1
 int array[n];
на
C++
1
int *array=new int[n]
Anriuser
-2 / 0 / 1
Регистрация: 18.10.2013
Сообщений: 207
09.04.2014, 01:28  [ТС]     Сортировки: пять методов на выбор в одной программе #38
Там изза етого еще появились ошибки(

Добавлено через 35 секунд
Помогите исправить код, мне через 6 часов вставать + еще отчет сделать надо((

Добавлено через 12 минут
Для того кто знает ето 5 мин чтоб исправить помогите же(

Добавлено через 19 минут
Да помогите пожалуйста!!!

Добавлено через 10 минут
Ну помогите же

Добавлено через 45 секунд
Короче ладно никто нифига тут мне не помог толком спасибо всем тем что хоть попытались
kiborgdelto
70 / 72 / 27
Регистрация: 23.03.2011
Сообщений: 141
09.04.2014, 01:53     Сортировки: пять методов на выбор в одной программе #39
задолбал, там было всего исправить 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, остальные должны работать в теории (но не проверял)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2014, 02:00     Сортировки: пять методов на выбор в одной программе
Еще ссылки по теме:

C++ Выбор элемента из сортировки
Написать программу: реализация методов сортировки C++
C++ Блок-схема к программе сортировки

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

Или воспользуйтесь поиском по форуму:
Anriuser
-2 / 0 / 1
Регистрация: 18.10.2013
Сообщений: 207
09.04.2014, 02:00  [ТС]     Сортировки: пять методов на выбор в одной программе #40
Наконецто спасибо большое)
Yandex
Объявления
09.04.2014, 02:00     Сортировки: пять методов на выбор в одной программе
Ответ Создать тему
Опции темы

Текущее время: 21:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru