Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Linker1989
0 / 0 / 1
Регистрация: 22.05.2013
Сообщений: 25
#1

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

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

Здравствуйте!
Помогите написать программу для сортировки методом прямых включений латинских букв по алфавиту.
Сортировка простыми включениями и метод прямых включений это одно и тоже?
Есть вот такая программа:
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2014, 01:29
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Написать программу для сортировки методом прямых включений латинских букв по алфавиту (C++):

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

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

Написать программу сортировки методом простых вставок
Написать программу сортировки методом простых вставок элементов массива,...

Написать программу для сортировки
Дан целочисленный массив, состоящий из N элементов. Число N и элементы массива...

Написать программу для сортировки массива по возрастанию
Написать программу в с++: Дан массив целых чисел. Написать программу для...

Написать программу для сортировки массива заданного с клавиатуры!
Размерность массива задаем с клавиатуры, элементы массива тоже задаем с...

31
Linker1989
0 / 0 / 1
Регистрация: 22.05.2013
Сообщений: 25
25.01.2014, 20:10  [ТС] #21
Не моё желание встраивать псевдокод в рабочий )))
Но как сделать чтобы работало через 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
iRomul
159 / 100 / 14
Регистрация: 17.10.2012
Сообщений: 483
Завершенные тесты: 1
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
MrGluck
Модератор
Эксперт CЭксперт С++
8022 / 4865 / 1425
Регистрация: 29.11.2010
Сообщений: 13,248
27.01.2014, 03:37 #23
Цитата Сообщение от Linker1989 Посмотреть сообщение
Не моё желание встраивать псевдокод в рабочий
Как бы мой код итак отражает этот псевдокод поэтапно, о чем я уже писал выше.
Если хотите названия другие - переименуйте. Ваш while описывает то же, что и мой for, только у меня and записано в качестве постусловия, что ничуть не позволяет заявить о том, что мой код имеет хоть немного другой алгоритм.
0
Linker1989
0 / 0 / 1
Регистрация: 22.05.2013
Сообщений: 25
28.01.2014, 21:01  [ТС] #24
Цитата Сообщение от MrGluck Посмотреть сообщение
Как бы мой код итак отражает этот псевдокод поэтапно, о чем я уже писал выше.
Если хотите названия другие - переименуйте. Ваш while описывает то же, что и мой for, только у меня and записано в качестве постусловия, что ничуть не позволяет заявить о том, что мой код имеет хоть немного другой алгоритм.
Согласен, разобрался с вашим кодом смысл понятен.
А требуется теперь настолько элементарная сортировка, чтобы не состояла из подпрограмм а была написана в одном майне.
Есть какие нибудь варианты?
0
MrGluck
Модератор
Эксперт CЭксперт С++
8022 / 4865 / 1425
Регистрация: 29.11.2010
Сообщений: 13,248
28.01.2014, 21:08 #25
Цитата Сообщение от Linker1989 Посмотреть сообщение
Есть какие нибудь варианты?
Конечно. Взять тело функций и вставить в место вызова в main
0
Linker1989
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
MrGluck
Модератор
Эксперт CЭксперт С++
8022 / 4865 / 1425
Регистрация: 29.11.2010
Сообщений: 13,248
28.01.2014, 21:34 #27
Цитата Сообщение от Linker1989 Посмотреть сообщение
А что делть с этой функцией если не использовать template, а делать так:?
Странный вопрос. Я бы понял, если бы вы спросили когда наоборот: функция шаблонная - и её надо встроить. А тут у вас даже идентификаторы одинаковые. Просто названия подставить где надо и все (по сути названия параметров функции сопоставить с названиями передаваемых аргументов из main).
0
Linker1989
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
iRomul
159 / 100 / 14
Регистрация: 17.10.2012
Сообщений: 483
Завершенные тесты: 1
29.01.2014, 00:43 #29
Linker1989, я вам выше приводил код, где алгоритм размещается в теле функции main. Чем он вас не устроил?
0
Linker1989
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
Linker1989
0 / 0 / 1
Регистрация: 22.05.2013
Сообщений: 25
30.01.2014, 20:49  [ТС] #31
Цитата Сообщение от iRomul Посмотреть сообщение
Linker1989, я вам выше приводил код, где алгоритм размещается в теле функции main. Чем он вас не устроил?
Там используеться swap, надо обйтись как нибудь без него)))
0
iRomul
159 / 100 / 14
Регистрация: 17.10.2012
Сообщений: 483
Завершенные тесты: 1
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.01.2014, 20:59
Привет! Вот еще темы с решениями:

Написать программу для сортировки массива по убыванию суммы цифр элементов
Написать программу для с++: Дан массив целых чисел. Написать программу для...

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

Написать программу для решения системы уравнений методом Гаусса (c++)
Добрый вечер! Нужно написать программу для решения системы уравнений методом...

Помогите написать программу для решения слау методом Гаусса
Осталось как обычно пару дней до сдачи курсовой, а она еще не готова! Помогите...


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Опции темы

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