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

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

22.01.2014, 01:29. Просмотров 1540. Ответов 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
Ответы с готовыми решениями:

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

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

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

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

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

31
MrGluck
Модератор
Эксперт CЭксперт С++
8087 / 4940 / 1431
Регистрация: 29.11.2010
Сообщений: 13,398
22.01.2014, 01:37 2
Цитата Сообщение от Linker1989 Посмотреть сообщение
Только как сделать что бы сортировать именно Алфавит?
Коды символов латиницы идут строго в порядке возрастания, так что их можно сравнивать как цифры и результат получится возрастающих в лексикографическом порядке.
1
Linker1989
0 / 0 / 1
Регистрация: 22.05.2013
Сообщений: 25
22.01.2014, 01:46  [ТС] 3
Цитата Сообщение от MrGluck Посмотреть сообщение
Коды символов латиницы идут строго в порядке возрастания, так что их можно сравнивать как цифры и результат получится возрастающих в лексикографическом порядке.
а как мне это записать? просто толком с с++ не сталкивался никогда!
0
MrGluck
Модератор
Эксперт CЭксперт С++
8087 / 4940 / 1431
Регистрация: 29.11.2010
Сообщений: 13,398
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);
}
1
Linker1989
0 / 0 / 1
Регистрация: 22.05.2013
Сообщений: 25
22.01.2014, 02:24  [ТС] 5
Всё компилируется только программа сама не запускается в чём дело может быть?
0
MrGluck
Модератор
Эксперт CЭксперт С++
8087 / 4940 / 1431
Регистрация: 29.11.2010
Сообщений: 13,398
22.01.2014, 02:25 6
Цитата Сообщение от Linker1989 Посмотреть сообщение
Всё компилируется только программа сама не запускается в чём дело может быть?
В какой среде работаете?
Возможно, что она запускается, но окно исчезает сразу после выполнения?
Добавьте перед закрывающей фигурной скобкой main std::cin.get(); Это послужит своего рода паузой.
0
Linker1989
0 / 0 / 1
Регистрация: 22.05.2013
Сообщений: 25
22.01.2014, 02:33  [ТС] 7
Цитата Сообщение от MrGluck Посмотреть сообщение
В какой среде работаете?
Возможно, что она запускается, но окно исчезает сразу после выполнения?
Добавьте перед закрывающей фигурной скобкой main std::cin.get(); Это послужит своего рода паузой.
Да она запускаеться только сразу исчезает! В Visual C++ 2008! Добавил main std::cin.get(); теперь она не компилируется)
0
MrGluck
Модератор
Эксперт CЭксперт С++
8087 / 4940 / 1431
Регистрация: 29.11.2010
Сообщений: 13,398
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();
}
1
Linker1989
0 / 0 / 1
Регистрация: 22.05.2013
Сообщений: 25
22.01.2014, 02:53  [ТС] 9
Спасибо огромное за помощь если возникнут вопросы ещё обращусь!!!!

Добавлено через 15 минут
Цитата Сообщение от MrGluck Посмотреть сообщение
]
А sortByDirectInclusion подразумевает использование сортировки как встроенной функции в С++? Просто в задании как бы просьба расписать сам процесс сортировки.
0
MrGluck
Модератор
Эксперт CЭксперт С++
8087 / 4940 / 1431
Регистрация: 29.11.2010
Сообщений: 13,398
22.01.2014, 03:10 10
Тут нету никаких встроенных функций для сортировки.
0
Linker1989
0 / 0 / 1
Регистрация: 22.05.2013
Сообщений: 25
23.01.2014, 00:26  [ТС] 11
Цитата Сообщение от MrGluck Посмотреть сообщение
Тут нету никаких встроенных функций для сортировки.
А можно получить комментарии к код программы???
0
MrGluck
Модератор
Эксперт CЭксперт С++
8087 / 4940 / 1431
Регистрация: 29.11.2010
Сообщений: 13,398
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();                      /// пауза
}
1
Linker1989
0 / 0 / 1
Регистрация: 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--)
объясни пожалуйста попроще вот этот момент в чё тут смысл?
0
MrGluck
Модератор
Эксперт CЭксперт С++
8087 / 4940 / 1431
Регистрация: 29.11.2010
Сообщений: 13,398
25.01.2014, 01:04 14
Linker1989, у меня таких строк нет.
Не за чем было в начальное условие цикла вносить присвоение, оно важно если цикл ни разу не выполнится.
По вашей цитате:
j = i - 1 // начальное условие цикла
j >= 0 && arr[j] > tmp // условие выполнения цикла. Пока j больше или равен 0 и элемент массива arr с индексом j превосходит значение tmp.
j-- // постусловие выполнения цикла - выполняется после каждой итерации.
Общий смысл я уже написал: мы перебрасываем все элементы, которые стоят перед tmp и его превосходят направо, в полученный пропуск вставляем tmp. Получается, что каждый следующий элемент встает на такое место, где все, что слева меньше его.
1
Linker1989
0 / 0 / 1
Регистрация: 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.
0
MrGluck
Модератор
Эксперт CЭксперт С++
8087 / 4940 / 1431
Регистрация: 29.11.2010
Сообщений: 13,398
25.01.2014, 16:01 16
У меня как бы по этому алгоритму и написано (в первичном осмотре)
0
Linker1989
0 / 0 / 1
Регистрация: 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();//задержка экрана
}
0
MrGluck
Модератор
Эксперт CЭксперт С++
8087 / 4940 / 1431
Регистрация: 29.11.2010
Сообщений: 13,398
25.01.2014, 18:33 18
А зачем вы из моего print сделали функцию с 3-мя параметрами? J лишний
0
Linker1989
0 / 0 / 1
Регистрация: 22.05.2013
Сообщений: 25
25.01.2014, 18:38  [ТС] 19
Цитата Сообщение от MrGluck Посмотреть сообщение
А зачем вы из моего print сделали функцию с 3-мя параметрами? J лишний
а всё убрал я int J, но всё равно сортировку не какую не делает
0
MrGluck
Модератор
Эксперт CЭксперт С++
8087 / 4940 / 1431
Регистрация: 29.11.2010
Сообщений: 13,398
25.01.2014, 18:53 20
Зачем вам вдруг понадобилось этот псевдокод "встраивать" в рабочий код? Я же вам сообщил, что алгоритм итак там тот же.
Отсюда и проблемы лезут.
Элементы массива начинают индексироваться с 0, а не 1. Поэтому для всех границ диапазона из псевдокода отнимайте по 1.
0
25.01.2014, 18:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2014, 18:53

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

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

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


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

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

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