Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
17 / 17 / 13
Регистрация: 31.03.2012
Сообщений: 86

Специальные методы сортировки

24.12.2013, 13:55. Показов 1467. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Реализовать специальные методы сортировки:
• Простейшую карманную с использованием второго массива и без него
• Обобщенную карманную сортировку с повторяющимися ключами и дополнительными списками
• Поразрядную сортировку
Все методы реализуются как подпрограммы и поэтапно добавляются в главную программу.

Есть частичная реализация,но я там конкретно запутался,толковой информации по этому найти не могу.
Прошу либо написать решение,либо хотя бы скинуть ссылки на теорию с частичной реализацией.
Заранее спасибо.

Добавлено через 3 часа 39 минут
Не уже ли ни кто ничего не знает????
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.12.2013, 13:55
Ответы с готовыми решениями:

Массивы. Методы сортировки
Отсортировать элемент массива B (1..10) по возрастанию и уменьшить каждый элемент на максимальный элемент. Вывести начальный и превращен...

Массивы. Методы сортировки
Сформировать массив из произведений положительных элементов каждого столбца заданной матрицы F (1..5,1..5). В одномерном массиве найти...

Методы сортировки: цифровой сортировки и деревьев сравнений
помогите решить методы сортировки: цифровой сортировки и деревьев сравнений ДАНО :номер читательского...

4
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33195 / 21491 / 8233
Регистрация: 22.10.2011
Сообщений: 36,879
Записей в блоге: 12
24.12.2013, 13:59
Поиск по форуму (конкретно - по разделу Паскаль) находит как минимум несколько вариантов реализации карманной сортировки, один из них приводил я, так что не надо говорить, что этого нет.
0
17 / 17 / 13
Регистрация: 31.03.2012
Сообщений: 86
24.12.2013, 14:35  [ТС]
Не нашёл Обобщённой сортировки для массива который мы задаём сами...

Добавлено через 23 минуты
У меня есть примерная реализация на с++ ,может кто нибудь может перекраить???

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
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
# include <iostream>
# include <time.h>
# include <cmath>
 
using namespace std;
const int N=100;
int mass[N], count2=0,count3=0;
 
struct MyList
{
    int inf;
    MyList *next;
};
 
 
 
void  MassCreator()
{
    //создание массива(c не повторяющимися элементами!!!!!!!!!!!!!)
    //////////////////////////////////////////////////////////////////////
     bool flag=0;
     int i=0,num=0,hlp=0;
     do
     {
         
        flag=0;
        hlp=sqrt(pow(rand()%N,2));
        for (int j = 0; j < i; j++)
        {
            if (hlp==mass[j])
            {
                flag=1;
            }
        }
        if (flag!=1)
        {
            mass[i]=hlp;
            i++;
        }
        
     } while (i<=N-1);
    cout<<"Содержимое массива: "<<endl;
    for (int i = 0; i < N; i++)
    {
        cout<<mass[i]<<" ";
    }
    cout<<endl;
    /////////////////////////////////////////////////////////////////////
}
 
void  MassCreator1()
{
    //создание массива
    for (int i = 0; i < N; i++)
    {
        mass[i]=rand()%(N/2);
    }
    cout<<"Содержимое массива: "<<endl;
    for (int i = 0; i < N; i++)
    {
        cout<<mass[i]<<" ";
    }
    cout<<endl;
}
 
void metod1(int mass[N])
{
    //карманная сортировака с дополнительным массивом
    int count=0,count1=0;
    int massHelp[N];
    for (int i = 0; i < N; i++)
    {
        massHelp[mass[i]]=mass[i];
        count++;
    }
    cout<<"Карманная сортировка: "<<endl;
    for (int i = 0; i < N; i++)
    {
        cout<<massHelp[i]<<" ";
    }
    cout<<endl;
    cout<<"Число перестановок: "<<count<<endl;
}
 
void metod2(int mass[N])
{
    //карманная сортировка
    int count=0, count1=0,hlp=0;
    for ( int i=0; i<N; i++)
    {
        while(++count && mass[i] != i )
        {
            hlp=mass[mass[i]];
            mass[mass[i]]=mass[i];
            mass[i]=hlp;
            count1++;
        }
    }
    cout<<"Карманная сортировка(без использования дополнительного массива): "<<endl;
    for (int i = 0; i < N; i++)
    {
        cout<<mass[i]<<" ";
    }
    cout<<endl;
    cout<<"Число перестановок: "<<count1<<" Число сравнени: "<<count<<endl;
}
 
void AddToList(MyList *PHelp,int inf)
{
    //добавление в список
    while (PHelp->next!=NULL)
    {
        PHelp=PHelp->next;
    }
    MyList *PHelp1 = new MyList;
    PHelp1->inf=inf;
    PHelp1->next=NULL;
    PHelp->next= PHelp1;
    
    
}
 
void ListCleaner(MyList **PHelp)
{
    //очистка списка
    while((*PHelp)!=NULL)
    {
        MyList *Del=(*PHelp);
        (*PHelp)=(*PHelp)->next;
        delete(Del);
    }
}
void metod3(int mass[N])
{
    //обобщенная карманная сортировка с повторяющимися ключами
    MyList *mass1=new MyList[N];
    int count=0;
    for (int i = 0; i < N; i++)
    {
        mass1[i].next=NULL;
    }
    for (int i = 0; i < N; i++)
    {
        AddToList(&mass1[mass[i]],mass[i]);
        count++;
    }
    cout<<"Карманная сортировка(обобщенная): "<<endl;
    for (int i = 0; i < N; i++)
    {
        MyList *PHelp=mass1[i].next;
        while (PHelp!=NULL)
        {
            cout<<PHelp->inf<<" ";
            PHelp=PHelp->next;
        }
    }
    for (int i = 0; i < N; i++)
    {
        ListCleaner(&mass1[i].next);
    }
    cout<<endl;
    cout<<"Число перестановок: "<<count<<endl;
}
void metod4(int mass[N])
{
    //поразрядкая сортировка
    MyList *massHelp = new MyList[10];
    for (int i = 0; i < 10; i++)
        massHelp[i].next=NULL;
    int k=N-1;
    int p=1,count = 0;
    while (k>=1)
    {
        k/=10;
        p*=10;
        for (int i = 0; i < N; i++)
        {
            AddToList(&massHelp[mass[i]%p/(p/10)],mass[i]);
            count++;
        }
        int l=0;
        for (int j = 0; j < 10; j++)
        {
            MyList *PHelp=massHelp[j].next;
            while (PHelp!=NULL)
            {
                mass[l]=PHelp->inf;
                PHelp=PHelp->next;
                count++;
                l++;
            }
        }
        for (int j = 0; j < 10; j++)
            ListCleaner(&massHelp[j].next);
    }
    cout<<"Поразрядная сортировка: "<<endl;
    for (int i = 0; i < N; i++)
    {
        cout<<mass[i]<<" ";
    }
    cout<<endl;
    cout<<"Число перестановок: "<<count<<endl;
 
}
void main ()
{
    int chs;
    srand(time(NULL));
    setlocale(LC_ALL,"Russian");
    do
    {
        cout<<"Выбериет метод соритровки: "<<endl;
        cout<<"1 - корманная сортировка с дополнительным массивом"<<endl;
        cout<<"2 - корманная сортировка"<<endl;
        cout<<"3 - добавление в список "<<endl;
        cout<<"4 - очистка списка      "<<endl; 
        cout<<"5 - обобщенная карманная сортировка"<<endl;
        cout<<"6 - поразрядная сортировка"<<endl;
        cout<<"0 - выход"<<endl;
        cin>>chs;
        switch (chs)
        {
            case 1: MassCreator (); metod1(mass); system("pause"); system("CLS"); break;
            case 2: MassCreator (); metod2(mass); system("pause"); system("CLS"); break;
            case 3: AddToList (); metod3(mass); system("pause"); system("CLS"); break;
            case 4: ListCleaner (); metod4(mass);  system("pause");system("CLS"); break;
            case 5: MassCreator1(); metod3(mass); system("pause"); system("CLS"); break;
            case 6: MassCreator1(); metod4(mass); system("pause"); system("CLS"); break;
            default: system("CLS"); break;
        }
    } while (chs!=0); 
}
Добавлено через 1 минуту
Цитата Сообщение от UI Посмотреть сообщение
Поиск по форуму (конкретно - по разделу Паскаль) находит как минимум несколько вариантов реализации карманной сортировки, один из них приводил я, так что не надо говорить, что этого нет.
Реализация для обобщённой сортировки рандомного массива есть.А вот как реализовать обычное добавление,я уже запутался конкретно
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33195 / 21491 / 8233
Регистрация: 22.10.2011
Сообщений: 36,879
Записей в блоге: 12
24.12.2013, 14:41
Цитата Сообщение от tyrok Посмотреть сообщение
Реализация для обобщённой сортировки рандомного массива есть.А вот как реализовать обычное добавление,я уже запутался конкретно
Объясни мне, какая разница, что сортировать, рандомно сгенерированный массив, или введенный пользователем? Тебе нужно предоставить процедуру, в которую передается массив, НЕупорядоченным, а после окончания работы процедуры массив становится упорядоченным по какому-то признаку. Всё, точка.

Какой это массив, и как он был заполнен - это вообще не имеет никакого значения, если у тебя есть реализация, сортирующая рандомный массив, то она будет делать то же самое с любым набором данных
0
17 / 17 / 13
Регистрация: 31.03.2012
Сообщений: 86
24.12.2013, 14:43  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
Объясни мне, какая разница, что сортировать, рандомно сгенерированный массив, или введенный пользователем? Тебе нужно предоставить процедуру, в которую передается массив, НЕупорядоченным, а после окончания работы процедуры массив становится упорядоченным по какому-то признаку. Всё, точка.

Какой это массив, и как он был заполнен - это вообще не имеет никакого значения, если у тебя есть реализация, сортирующая рандомный массив, то она будет делать то же самое с любым набором данных
Ну всё,я уже конкретно запутался
ппц какой-то то ли голова не варит,то ли ещё что))
Не знаю,у меня не получается
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.12.2013, 14:43
Помогаю со студенческими работами здесь

Методы сортировки
Преобразуйте текст по следующему правилу: если нет символа '*', то оставить без изменений, иначе, заменить каждый символ, встречающийся...

Методы сортировки
Ребят помогите пожалуйста 1. Задать массив из 8-12 элементов. Разобрать на примере этого массива и подробно описать сортировку ...

Методы сортировки
Рекурсия . кто шарит? 1)Реализовать три алгоритма внутренней сортировки (алгоритмы выбрать самостоятельно) 1.1 О(n) 1.2 O(n2)...

Методы сортировки
Помогите изменить метод шейкер на метод вставки с прямым включением и добавить еще 3 метод линейного выбора и добавить его в сравнение...

Методы сортировки
Сравнить скорости сортировки массивов - небольшого (до 1000 елементов) и большого (10000 елементов) методами простого выбора,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru