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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Linker1989
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 25
22.01.2014, 01:29     Написать программу для сортировки методом прямых включений латинских букв по алфавиту #1
Здравствуйте!
Помогите написать программу для сортировки методом прямых включений латинских букв по алфавиту.
Сортировка простыми включениями и метод прямых включений это одно и тоже?
Есть вот такая программа:
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;
}
Только как сделать что бы сортировать именно Алфавит?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2014, 01:29     Написать программу для сортировки методом прямых включений латинских букв по алфавиту
Посмотрите здесь:

C++ Написать программу для сортировки
C++ Написать программу для сортировки массива заданного с клавиатуры!
Написать программу для сортировки массива по возрастанию C++
C++ Написать программу для сортировки массива по убыванию суммы цифр элементов
C++ Написать программу для сортировки массива способами шелла вставки слияния и пузырьком
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
22.01.2014, 01:37     Написать программу для сортировки методом прямых включений латинских букв по алфавиту #2
Цитата Сообщение от Linker1989 Посмотреть сообщение
Только как сделать что бы сортировать именно Алфавит?
Коды символов латиницы идут строго в порядке возрастания, так что их можно сравнивать как цифры и результат получится возрастающих в лексикографическом порядке.
Linker1989
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 25
22.01.2014, 01:46  [ТС]     Написать программу для сортировки методом прямых включений латинских букв по алфавиту #3
Цитата Сообщение от MrGluck Посмотреть сообщение
Коды символов латиницы идут строго в порядке возрастания, так что их можно сравнивать как цифры и результат получится возрастающих в лексикографическом порядке.
а как мне это записать? просто толком с с++ не сталкивался никогда!
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
22.01.2014, 02:01     Написать программу для сортировки методом прямых включений латинских букв по алфавиту #4
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
#include <cstring>
#include <iostream>
 
template <typename T>
void sortByDirectInclusion(T *arr, const int size)
{
    for (int i = 1; i < size; i++)
    {
        T tmp = arr[i];
        int j = i - 1;
        for (; j >= 0 && arr[j] > tmp; j--)
            arr[j + 1] = arr[j];
        arr[j + 1] = tmp;
    }
}
 
template <typename T>
void print(const T *arr, const int size)
{
    for (int i = 0; i < size; i++)
        std::cout << arr[i];
    std::cout << std::endl;
}
 
int main()
{
    char arr[] = "azhdasasqgjhdakhmpox";
    const int N = strlen(arr); // определяем размер массива
    sortByDirectInclusion(arr, N);
    print(arr, N);
}
Linker1989
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 25
22.01.2014, 02:24  [ТС]     Написать программу для сортировки методом прямых включений латинских букв по алфавиту #5
Всё компилируется только программа сама не запускается в чём дело может быть?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
22.01.2014, 02:25     Написать программу для сортировки методом прямых включений латинских букв по алфавиту #6
Цитата Сообщение от Linker1989 Посмотреть сообщение
Всё компилируется только программа сама не запускается в чём дело может быть?
В какой среде работаете?
Возможно, что она запускается, но окно исчезает сразу после выполнения?
Добавьте перед закрывающей фигурной скобкой main std::cin.get(); Это послужит своего рода паузой.
Linker1989
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 25
22.01.2014, 02:33  [ТС]     Написать программу для сортировки методом прямых включений латинских букв по алфавиту #7
Цитата Сообщение от MrGluck Посмотреть сообщение
В какой среде работаете?
Возможно, что она запускается, но окно исчезает сразу после выполнения?
Добавьте перед закрывающей фигурной скобкой main std::cin.get(); Это послужит своего рода паузой.
Да она запускаеться только сразу исчезает! В Visual C++ 2008! Добавил main std::cin.get(); теперь она не компилируется)
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
22.01.2014, 02:35     Написать программу для сортировки методом прямых включений латинских букв по алфавиту #8
Цитата Сообщение от MrGluck Посмотреть сообщение
Добавьте перед закрывающей фигурной скобкой main
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
#include <cstring>
#include <iostream>
 
template <typename T>
void sortByDirectInclusion(T *arr, const int size)
{
    for (int i = 1; i < size; i++)
    {
        T tmp = arr[i];
        int j = i - 1;
        for (; j >= 0 && arr[j] > tmp; j--)
            arr[j + 1] = arr[j];
        arr[j + 1] = tmp;
    }
}
 
template <typename T>
void print(const T *arr, const int size)
{
    for (int i = 0; i < size; i++)
        std::cout << arr[i];
    std::cout << std::endl;
}
 
int main()
{
    char arr[] = "azhdasasqgjhdakhmpox";
    const int N = strlen(arr); // определяем размер массива
    sortByDirectInclusion(arr, N);
    print(arr, N);
    std::cin.get();
}
Linker1989
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 25
22.01.2014, 02:53  [ТС]     Написать программу для сортировки методом прямых включений латинских букв по алфавиту #9
Спасибо огромное за помощь если возникнут вопросы ещё обращусь!!!!

Добавлено через 15 минут
Цитата Сообщение от MrGluck Посмотреть сообщение
]
А sortByDirectInclusion подразумевает использование сортировки как встроенной функции в С++? Просто в задании как бы просьба расписать сам процесс сортировки.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
22.01.2014, 03:10     Написать программу для сортировки методом прямых включений латинских букв по алфавиту #10
Тут нету никаких встроенных функций для сортировки.
Linker1989
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 25
23.01.2014, 00:26  [ТС]     Написать программу для сортировки методом прямых включений латинских букв по алфавиту #11
Цитата Сообщение от MrGluck Посмотреть сообщение
Тут нету никаких встроенных функций для сортировки.
А можно получить комментарии к код программы???
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
25.01.2014, 00:28     Написать программу для сортировки методом прямых включений латинских букв по алфавиту #12
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
#include <cstring>  // заголовочный файл для работы со строками
#include <iostream> // ввод/вывод
 
/** объявляем шаблонную функцию с парамтром T для сортировки прямыми включениями
* @param arr  - массив для сортировки
* @param size - размер массива
**/
template <typename T>
void sortByDirectInclusion(T *arr, const int size)
{
    for (int i = 1; i < size; i++) /// для каждого элемента массива начиная со второго
    {
        T tmp = arr[i];            /// запоминаем значение очередного элемента
        int j = i - 1;             ///
        for (; j >= 0 && arr[j] > tmp; j--) /// для всех превосходящих по значению элементов перед ним
            arr[j + 1] = arr[j];            /// осуществляем сдвиг на одну позицию вперед
        arr[j + 1] = tmp;                   /// вставляем элемент в подготовленное для него место
    }
}
 
/** объявляем шаблонную функцию с парамтром T для вывода массива на экран
* @param arr  - массив для сортировки
* @param size - размер массива
**/
template <typename T>
void print(const T *arr, const int size)
{
    for (int i = 0; i < size; i++) /// для каждого элемента массива
        std::cout << arr[i];       /// выводим его на экран
    std::cout << std::endl;        /// перевод строки
}
 
int main()                               /// главная функция
{
    char arr[] = "azhdasasqgjhdakhmpox"; /// объявляем массив
    const int N = strlen(arr);           /// определяем размер массива
    sortByDirectInclusion(arr, N);       /// вызываем функцию сортировки включениями
    print(arr, N);                       /// выводим результат на экран
    std::cin.get();                      /// пауза
}
Linker1989
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 25
25.01.2014, 00:58  [ТС]     Написать программу для сортировки методом прямых включений латинских букв по алфавиту #13
[QUOTE=MrGluck;5690346][CPP]#include <cstring> // заголовочный файл для работы со строками
C++ (Qt)
1
for (j = i - 1; j >= 0 && arr[j] > tmp; j--)
объясни пожалуйста попроще вот этот момент в чё тут смысл?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
25.01.2014, 01:04     Написать программу для сортировки методом прямых включений латинских букв по алфавиту #14
Linker1989, у меня таких строк нет.
Не за чем было в начальное условие цикла вносить присвоение, оно важно если цикл ни разу не выполнится.
По вашей цитате:
j = i - 1 // начальное условие цикла
j >= 0 && arr[j] > tmp // условие выполнения цикла. Пока j больше или равен 0 и элемент массива arr с индексом j превосходит значение tmp.
j-- // постусловие выполнения цикла - выполняется после каждой итерации.
Общий смысл я уже написал: мы перебрасываем все элементы, которые стоят перед tmp и его превосходят направо, в полученный пропуск вставляем tmp. Получается, что каждый следующий элемент встает на такое место, где все, что слева меньше его.
Linker1989
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 25
25.01.2014, 15:59  [ТС]     Написать программу для сортировки методом прямых включений латинских букв по алфавиту #15
MrGluck
А как по вот этому алгоритму выполнить программу?
Algorithm 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.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
25.01.2014, 16:01     Написать программу для сортировки методом прямых включений латинских букв по алфавиту #16
У меня как бы по этому алгоритму и написано (в первичном осмотре)
Linker1989
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 25
25.01.2014, 18:30  [ТС]     Написать программу для сортировки методом прямых включений латинских букв по алфавиту #17
Цитата Сообщение от MrGluck Посмотреть сообщение
У меня как бы по этому алгоритму и написано (в первичном осмотре)
Вот в общем пришлось убрать template, чтобы получить более развёрнуто это всё но теперь пишет:
error C2661: print: нет перегруженной функции, принимающей 2 аргументов
и ни чего не сортирует))) печатает две не отсортированные строки и всё, где накосячил интересно)))

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
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
#include <iostream>//для функции ввода/вывода потока
#include <cstring>//функция для манипуляции со строками и массивами
 
using namespace std;
void sortByDirectInclusion (int *I, const int size)
{
    for (int J = 2; J < size; J++) // цикл проходов
        {
        int K = I[J];
        int L = J-1;
        while ( L >= 1 && I[J] > K)// поиск места элемента в готовой последовательности
        {
           I[L + 1] = I[L];// сдвигаем элемент направо, пока не дошли
            L--;
        }
            I[L + 1] = K;// место найдено, вставить элемент 
        }
}
 void sortByDirectInclusion (char *I, const int size)
{
    for (int J = 2; J < size; J++) // цикл проходов
        {
        int K = I[J];
        int L = J-1;
        while ( L >= 1 && I[J] > K)// поиск места элемента в готовой последовательности
        {
           I[L + 1] = I[L];// сдвигаем элемент направо, пока не дошли
                    L--;
        }
        I[L + 1] = K;// место найдено, вставить элемент     
    }
}
void print(const int *I, int J, const int size)
{
    for (int J = 1; J < size; J++)
            cout << I[J];
    cout << std::endl;
}
void print(const char *I, int J, const int size)
{
    for (int J = 1; J < size; J++)
        cout << I[J];
    cout << std::endl;
}
int main()
{
    char I[] = "azhdasasqgjhdakhmkjbhlpox";
    const int N = strlen(I);// определяем размер массива
    print(I, N);  // печать неотсортированного массива
    sortByDirectInclusion(I, N);
    print(I, N); // печать отсортированного массива
    cin.get();//задержка экрана
}
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
25.01.2014, 18:33     Написать программу для сортировки методом прямых включений латинских букв по алфавиту #18
А зачем вы из моего print сделали функцию с 3-мя параметрами? J лишний
Linker1989
0 / 0 / 0
Регистрация: 22.05.2013
Сообщений: 25
25.01.2014, 18:38  [ТС]     Написать программу для сортировки методом прямых включений латинских букв по алфавиту #19
Цитата Сообщение от MrGluck Посмотреть сообщение
А зачем вы из моего print сделали функцию с 3-мя параметрами? J лишний
а всё убрал я int J, но всё равно сортировку не какую не делает
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2014, 18:53     Написать программу для сортировки методом прямых включений латинских букв по алфавиту
Еще ссылки по теме:

C++ Написать программу для решения системы уравнений методом Гаусса (c++)
Написать программу для реализации алгоритма сортировки методом пирамиды C++

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

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
25.01.2014, 18:53     Написать программу для сортировки методом прямых включений латинских букв по алфавиту #20
Зачем вам вдруг понадобилось этот псевдокод "встраивать" в рабочий код? Я же вам сообщил, что алгоритм итак там тот же.
Отсюда и проблемы лезут.
Элементы массива начинают индексироваться с 0, а не 1. Поэтому для всех границ диапазона из псевдокода отнимайте по 1.
Yandex
Объявления
25.01.2014, 18:53     Написать программу для сортировки методом прямых включений латинских букв по алфавиту
Ответ Создать тему
Опции темы

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