Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/25: Рейтинг темы: голосов - 25, средняя оценка - 4.56
0 / 0 / 1
Регистрация: 22.05.2013
Сообщений: 25
1

Написать программу для сортировки методом прямых включений латинских букв по алфавиту

22.01.2014, 01:29. Показов 5188. Ответов 31
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Помогите написать программу для сортировки методом прямых включений латинских букв по алфавиту.
Сортировка простыми включениями и метод прямых включений это одно и тоже?
Есть вот такая программа:
C++ (Qt)
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
#include <iostream>
 
using namespace std;
 
int main(int argc, char* argv[])
{
    int arr[8] = {27, 412, 71, 81, 59, 14, 273, 87},i,j;
 
    for (j=1;j<8;j++){
        if (arr[j]< arr[j-1]) {
            //Что бы значение j мы не меняли а работали с i
            i=j;
            //Меняем местами пока не найдем нужное место
            do{
                swap(arr[i],arr[i-1]);
                i--;
                //защита от выхода за пределы массива
                if (i == 0) break;
            }
            while (arr[i]< arr[i-1]) ;
        }
        for (i=0;i<8;i++)
            cout << arr[i]<< ' ';
        cout << '\n';
    }
    getch();
return 0;
}
Только как сделать что бы сортировать именно Алфавит?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.01.2014, 01:29
Ответы с готовыми решениями:

Написать программу, сортирующую по алфавиту строку латинских букв
Помогите 3. Написать программу, сортирующую по алфавиту строку латинских букв.

Написать код для сортировки выбором для вещественных, целых чисел и латинских букв
здравствуйте! помогите написать код для сортировки выбором на си для вещественных, целых чисел и...

Напишите программу для графической иллюстрации сортировки массива алгоритмом простых включений
Товарищи доброго времени суток, помогите программой!! Есть задача: &quot;Напишите программу для...

Написать программу для сортировки массива методом подсчета
Написать программу для сортировки массива методом подсчета.И можно в комментариях расписать каждую...

31
0 / 0 / 1
Регистрация: 22.05.2013
Сообщений: 25
25.01.2014, 20:10  [ТС] 21
Author24 — интернет-сервис помощи студентам
Не моё желание встраивать псевдокод в рабочий )))
Но как сделать чтобы работало через While как здесь если можно конечно???

lgorithm SIS ( Сортировка Прямым включением). Отсортировать на старом месте последовательность целых чисел I(1), I(2), . . . ,I (N) в порядке возрастания.
Шаг 1. [ Основная итерация ]
For J← 2 to N do through шаг 4 od ; and STOP.
Шаг 2.[ Выбор следующего целого ] Set K← I(J); and L←J−1.
Шаг 3. [ Сравнение с отсортированного целыми ] While K<I(L)
AND L≥1 do set I (L+1) ←I(L); and L←L−1 od.
Шаг 4. [ Включение ] Set I(L+1)←K.
0
163 / 104 / 14
Регистрация: 17.10.2012
Сообщений: 488
25.01.2014, 22:46 22
Linker1989, вот вам вариант с while:
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
#include <iostream>
 
using namespace std;
 
void swap(char& a, char& b) {
 
    int c = a;
    a = b;
    b = c;
 
}
 
float main() {
 
    const size_t ARRAY_SIZE = 5;
 
    char char_array[ARRAY_SIZE] = {'Z', 'Y', 'B', 'C', 'A'};
 
    int i = 0;
 
    for(int j = 1; j < ARRAY_SIZE; j++) {
 
        if(char_array[j] < char_array[j-1]) {
 
            i = j;
            
            do {
 
                swap(char_array[i], char_array[i-1]);
                i--;
                if(!i) break;
 
            } while(char_array[i] < char_array[i-1]);
 
        } //if
 
    } //for
 
    for (i = 0; i < ARRAY_SIZE; i++)
        cout << char_array[i] << ' ';
 
    cout << endl;
 
    system("pause");
 
    return 0.0;
 
}
Вывод:
A B C Y Z
Для продолжения нажмите любую клавишу . . .
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
27.01.2014, 03:37 23
Цитата Сообщение от Linker1989 Посмотреть сообщение
Не моё желание встраивать псевдокод в рабочий
Как бы мой код итак отражает этот псевдокод поэтапно, о чем я уже писал выше.
Если хотите названия другие - переименуйте. Ваш while описывает то же, что и мой for, только у меня and записано в качестве постусловия, что ничуть не позволяет заявить о том, что мой код имеет хоть немного другой алгоритм.
0
0 / 0 / 1
Регистрация: 22.05.2013
Сообщений: 25
28.01.2014, 21:01  [ТС] 24
Цитата Сообщение от MrGluck Посмотреть сообщение
Как бы мой код итак отражает этот псевдокод поэтапно, о чем я уже писал выше.
Если хотите названия другие - переименуйте. Ваш while описывает то же, что и мой for, только у меня and записано в качестве постусловия, что ничуть не позволяет заявить о том, что мой код имеет хоть немного другой алгоритм.
Согласен, разобрался с вашим кодом смысл понятен.
А требуется теперь настолько элементарная сортировка, чтобы не состояла из подпрограмм а была написана в одном майне.
Есть какие нибудь варианты?
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
28.01.2014, 21:08 25
Цитата Сообщение от Linker1989 Посмотреть сообщение
Есть какие нибудь варианты?
Конечно. Взять тело функций и вставить в место вызова в main
0
0 / 0 / 1
Регистрация: 22.05.2013
Сообщений: 25
28.01.2014, 21:32  [ТС] 26
Цитата Сообщение от MrGluck Посмотреть сообщение
Конечно. Взять тело функций и вставить в место вызова в main
А что делть с этой функцией если не использовать template, а делать так:?
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void sortByDirectInclusion(int *I, const int size)
{
    for (int J = 1; J < size; J++) /// для каждого элемента массива начиная со второго
    {
        int K = I[J];            /// запоминаем значение очередного элемента
        int L = J - 1;             ///
        for (; L >= 0 && I[L] > K; L--) /// для всех превосходящих по значению элементов перед ним
            I[L + 1] = I[L];            /// осуществляем сдвиг на одну позицию вперед
        I[L + 1] = K;                   /// вставляем элемент в подготовленное для него место
    }
}
 void sortByDirectInclusion(char *I, const int size)
{
    for (int J = 1; J < size; J++) /// для каждого элемента массива начиная со второго
    {
        int K = I[J];            /// запоминаем значение очередного элемента
        int L = J - 1;             ///
        for (; L >= 0 && I[L] > K; L--) /// для всех превосходящих по значению элементов перед ним
            I[L + 1] = I[L];            /// осуществляем сдвиг на одну позицию вперед
        I[L + 1] = K;                   /// вставляем элемент в подготовленное для него место
    }
}
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
28.01.2014, 21:34 27
Цитата Сообщение от Linker1989 Посмотреть сообщение
А что делть с этой функцией если не использовать template, а делать так:?
Странный вопрос. Я бы понял, если бы вы спросили когда наоборот: функция шаблонная - и её надо встроить. А тут у вас даже идентификаторы одинаковые. Просто названия подставить где надо и все (по сути названия параметров функции сопоставить с названиями передаваемых аргументов из main).
0
0 / 0 / 1
Регистрация: 22.05.2013
Сообщений: 25
28.01.2014, 21:36  [ТС] 28
Цитата Сообщение от MrGluck Посмотреть сообщение
Странный вопрос. Я бы понял, если бы вы спросили когда наоборот: функция шаблонная - и её надо встроить. А тут у вас даже идентификаторы одинаковые. Просто названия подставить где надо и все (по сути названия параметров функции сопоставить с названиями передаваемых аргументов из main).
ну так в майне она один раз вызывается))) как туда записать две функции?:
C++ (Qt)
1
2
3
4
5
6
7
8
9
int main()                               /// главная функция
{
    char I[] = "azhdasasqgjhddsfagbvczxakhmpox"; /// объявляем массив
    const int N = strlen(I);           /// определяем размер массива
     print(I, N); 
    sortByDirectInclusion(I, N);       /// вызываем функцию сортировки включениями
    print(I, N);                       /// выводим результат на экран
 cin.get();                      /// пауза
}
0
163 / 104 / 14
Регистрация: 17.10.2012
Сообщений: 488
29.01.2014, 00:43 29
Linker1989, я вам выше приводил код, где алгоритм размещается в теле функции main. Чем он вас не устроил?
0
0 / 0 / 1
Регистрация: 22.05.2013
Сообщений: 25
29.01.2014, 00:45  [ТС] 30
Цитата Сообщение от MrGluck Посмотреть сообщение
Странный вопрос. Я бы понял, если бы вы спросили когда наоборот: функция шаблонная - и её надо встроить. А тут у вас даже идентификаторы одинаковые. Просто названия подставить где надо и все (по сути названия параметров функции сопоставить с названиями передаваемых аргументов из main).
В общем вот так она работает:
C++ (Qt)
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
#include <cstring>  // заголовочный файл для работы со строками
#include <iostream> // ввод/вывод
 using namespace std;
 void sortByDirectInclusion(char I[], const int size)
{
    for (int J = 1; J < size; J++) /// для каждого элемента массива начиная со второго
    {
        int K = I[J];            /// запоминаем значение очередного элемента
        int L = J - 1;             ///
        for (; L >= 0 && I[L] > K; L--) /// для всех превосходящих по значению элементов перед ним
            I[L + 1] = I[L];            /// осуществляем сдвиг на одну позицию вперед
        I[L + 1] = K;                   /// вставляем элемент в подготовленное для него место
    }
for (int J = 0; J < size; J++) /// для каждого элемента массива
  cout << I[J];       /// выводим его на экран
    cout << endl;        /// перевод строки
 }
int main()      /// главная функция
{
    char I[] = "azhdasasqgjhddsfagbvczxakhmpox"; /// объявляем массив
    const int N = strlen(I);           /// определяем размер массива
 
    sortByDirectInclusion(I, N);       /// вызываем функцию сортировки включениями
     cin.get();    /// пауза
}

потом я беру вставляю всё что выше int main вместо " sortByDirectInclusion(I, N);" и ничего не получается:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <cstring>  // заголовочный файл для работы со строками
#include <iostream> // ввод/вывод
 using namespace std;
int main(const int size)    /// главная функция
{
    char I[] = "azhdasasqgjhddsfagbvczxakhmpox"; /// объявляем массив
    const int N = strlen(I);           /// определяем размер массива
 
    {
    for (int J = 1; J < size; J++) /// для каждого элемента массива начиная со второго
    {
        int K = I[J];            /// запоминаем значение очередного элемента
        int L = J - 1;             ///
        for (; L >= 0 && I[L] > K; L--) /// для всех превосходящих по значению элементов перед ним
            I[L + 1] = I[L];            /// осуществляем сдвиг на одну позицию вперед
        I[L + 1] = K;                   /// вставляем элемент в подготовленное для него место
    }
for (int J = 0; J < size; J++) /// для каждого элемента массива
  cout << I[J];       /// выводим его на экран
    cout << endl;        /// перевод строки
 }
    
 cin.get(); /// пауза
}
0
0 / 0 / 1
Регистрация: 22.05.2013
Сообщений: 25
30.01.2014, 20:49  [ТС] 31
Цитата Сообщение от iRomul Посмотреть сообщение
Linker1989, я вам выше приводил код, где алгоритм размещается в теле функции main. Чем он вас не устроил?
Там используеться swap, надо обйтись как нибудь без него)))
0
163 / 104 / 14
Регистрация: 17.10.2012
Сообщений: 488
30.01.2014, 20:59 32
Linker1989, прошу
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
#include <iostream>
 
using namespace std;
 
float main() {
 
    const size_t ARRAY_SIZE = 5; 
    char char_array[ARRAY_SIZE] = {'Z', 'Y', 'B', 'C', 'A'};
 
    int i = 0;
    char tmp;
 
    for(int j = 1; j < ARRAY_SIZE; j++) {
 
        if(char_array[j] < char_array[j-1]) {
 
            i = j;
            
            do {
 
                tmp = char_array[i];
                char_array[i] = char_array[i-1];
                char_array[i-1] = tmp;
                
                i--;
                if(!i) break;
 
            } while(char_array[i] < char_array[i-1]);
 
        } //if
 
    } //for
 
    for (i = 0; i < ARRAY_SIZE; i++)
        cout << char_array[i] << ' ';
 
    cout << endl;
 
    system("pause");
 
    return 0.0;
 
}
1
30.01.2014, 20:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.01.2014, 20:59
Помогаю со студенческими работами здесь

Написать программу для реализации алгоритма сортировки методом пирамиды
Разработать программу для реализации алгоритма сортировки методом пирамиды. Вывести в диалоге...

Записать алгоритм сортировки в таблице чисел А[1:n] методом включений.
Помогите, пожалуста!:help: Очень нужна Ваша помощь! Записать алгоритм сортировки в таблице чисел А...

Написать программу для графической иллюстрации сортировки массива методом пузырька
Напишите программу для графической иллюстрации сортировки массива методом «пузырька». Массив...

Написать программу сортировки существующего списка по алфавиту
Написать программу сортировки существующего списка по алфавиту.


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru