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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Anriuser
-2 / 0 / 1
Регистрация: 18.10.2013
Сообщений: 273
#1

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

31.03.2014, 21:03. Просмотров 1590. Ответов 40
Метки нет (Все метки)

Помогите написать програмку которая сортирует пьятьма методами на выбор 1) вставками 2) выбором 3) обменом (пузырьком) 4)быстрая сортировка 5) слиянием.
В нете все ети методы есть, но связать в одну прогу у меня не получается.

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

Несколько алгоритмов сортировки в одной программе - C++
Здравствуйте, форумчане. Подскажите пожалуйста, у меня есть 5 кодов программ. Суть в том, что каждая из них сортирует динамический...

Напишите реализацию методов, предоставляющих доступ к данным класса. Отобразите в программе работу этих методов - C++
Реализация методов класса. Напишите реализацию методов, предоставляющих доступ к данным класса. Отобразите в программе...

Измерить быстродействие методов сортировки - C++
Нужно измерить время работы различных методов сортировки , но не имею понятия как указателями перенести значения массива для каждого метода...

Написать программу: реализация методов сортировки - C++
Помогите , пожалуйста , написать программу. В долгу не останусь. Написать программу , в которой реализуются методы сортировки : пузырька...

Сравнительный анализ методов сортировки одномерных массивов - C++
Товарищи программисты, помогите пожалуйста!!! У меня такое задание, кто сможет решить, напишите пожалуйста, бо сама я как бы не очень...

Сравнение быстрого и прямого включения методов сортировки - C++
Есть массив, размер которого задает пользователь. Затем этот массив копируется на две одинаковые копии и каждая копия (не зависимо от...

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

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

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

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

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

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

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

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

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

Добавлено через 45 секунд
Короче ладно никто нифига тут мне не помог толком спасибо всем тем что хоть попытались
0
kiborgdelto
71 / 73 / 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, остальные должны работать в теории (но не проверял)
1
Anriuser
-2 / 0 / 1
Регистрация: 18.10.2013
Сообщений: 273
09.04.2014, 02:00  [ТС] #40
Наконецто спасибо большое)
0
kiborgdelto
71 / 73 / 27
Регистрация: 23.03.2011
Сообщений: 141
09.04.2014, 02:03 #41
Цитата Сообщение от Anriuser Посмотреть сообщение
мне через 6 часов вставать + еще отчет сделать надо((
помнитса я за ночь успевал 3 курсовых работы сделать с нуля (разобрать теорию, написать программу (которую не найдёшь в интернете и никто на формумах полностью не напишет, как к примеру решение системы булевских уравнений), написать отчёт+нарисовать блок-схему программы), так что простой отчёт по лабораторной сделать думаю успеете
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2014, 02:03
Привет! Вот еще темы с ответами:

Исследовать возможности адаптации различных методов сортировки к структуре исходного массива - C++
Исследовать возможности адаптации различных методов сортировки к структуре исходного массива. С этой целью определить время сортировки ...

Ввести пять строк и из каждой строки вывести пять последних символа - C++
Ввести пять строк и из каждой строки вывести пять последних символа. P.S сори что второй раз,просто препод сказал, что несовсем...

Отсортировать первые пять элементов массива по возрастанию, последние пять по убыванию - C++
Введем 11 чисел, число по середине должна остаться, а первые пять по возрастанию, последние пять по убыванию. Вот мой код: #include...

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
09.04.2014, 02:03
Ответ Создать тему
Опции темы

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