Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.60
kompnet
41 / 1 / 0
Регистрация: 11.10.2011
Сообщений: 112
#1

Челночная сортировка - C++

10.05.2012, 21:44. Просмотров 2899. Ответов 17
Метки нет (Все метки)

Дан массив фамилий, требуется его упорядочить в алфавитном порядке, используя челночную сортировку.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2012, 21:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Челночная сортировка (C++):

Челночная сортировка - C++
Дан массив размером 10,000 сделать челночную сортировку!

челночная сортировка - C++
доброго времени суток! кому не сложно объяснить по поводу алгоритма челночной сортировки? задание: сортировка списка студентов...

Челночная сортировка / Список - C++
Я бы хотел попросить о помощи более опытных людей в програмирование. сам пробовал- не получилось. из-за не достатка опыта. а надо и...

Челночная сортировка элементов массива по убыванию - C++
Есть пример сортировки по возрастанию, не пойму как сделать сортировку по убыванию

Сортировка Шелла. Написал программу, не могу понять, почему сортировка не выполняется - C++
Программа создает динамический массив с рандомным заполнением. Дальше выбор сортировок, пузырьком или сортировка Шелла. Вот она то и не...

Сортировка слиянием. В каком куске кода происходит сортировка и каким именно образом? - C++
Помогите, пожалуйста, разобраться. Подскажите в каком куске кода происходит сортировка и каким именно образом? #include <iostream> ...

17
zitxbit
88 / 740 / 75
Регистрация: 11.04.2012
Сообщений: 971
11.05.2012, 16:32 #2
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
#define N 10
 
void swap(int& n1, int& n2);
 
int main()
{
    int A[10] = { 7, 9, 6, 1, 5, 4, 3, 2, 8, 9 };
 
    for (int i = 0; i < N-1; i++)
        if (A[i] > A[i+1])
        {
            swap(A[i],A[i+1]);
            for (int k = i; (A[k] < A[k-1]) && (k >= 1); k--)
                swap(A[k],A[k-1]);
        }
 
    for (int q = 0; q < N; q++)
          printf("%d ",A[q]);
    printf("\n");
 
    return 0;
}
 
void swap(int& n1, int& n2)
{ int _t = n1; n1 = n2; n2 = _t; }
http://liveworkspace.org/code/b88b992f9f833b2a94ee64e48706c5ac
0
kompnet
41 / 1 / 0
Регистрация: 11.10.2011
Сообщений: 112
12.05.2012, 18:06  [ТС] #3
Это именно челночная сортировка?
0
zitxbit
88 / 740 / 75
Регистрация: 11.04.2012
Сообщений: 971
12.05.2012, 19:30 #4
Да это именно челночная сортировка. http://wenegred.ru/forum/15-84-1
1
kompnet
41 / 1 / 0
Регистрация: 11.10.2011
Сообщений: 112
12.05.2012, 23:15  [ТС] #5
А как теперь все это реализовать со структурой данных? Как обращаться к конкретному эл-ту структуры?
0
zitxbit
88 / 740 / 75
Регистрация: 11.04.2012
Сообщений: 971
13.05.2012, 09:22 #6
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
#define N 10
 
typedef struct Nums
{
    int n;
} NUMS;
 
void swapn(NUMS& n1, NUMS& n2); 
 
int main()
{
   static NUMS nums[] = { { 7 }, { 9 }, { 6 }, { 1 }, { 5 }, { 4 }, { 3 }, { 2 }, { 8 }, { 9 } }; 
  
   for (int i = 0; i < N-1; i++)
        if (nums[i].n > nums[i+1].n)
        {
            swapn(nums[i], nums[i+1]);
            for (int k = i; (nums[k].n < nums[k-1].n) && (k >= 1); k--)
                swapn(nums[k],nums[k-1]);
 
        }
 
    for (int q = 0; q < N; q++)
          printf("%d ",nums[q].n);
    printf("\n");
 
    return 0;
}
 
void swapn(NUMS& n1, NUMS& n2)
 { NUMS _tn = n1; n1 = n2; n2 = _tn; }
http://liveworkspace.org/code/e513185c04ac404851a8dbf208c43ba5
0
kompnet
41 / 1 / 0
Регистрация: 11.10.2011
Сообщений: 112
13.05.2012, 14:54  [ТС] #7
Хорошо. А если структура хранится в файле, т.е. она уже есть?
0
zitxbit
88 / 740 / 75
Регистрация: 11.04.2012
Сообщений: 971
13.05.2012, 15:17 #8
В каком файле текстовом или бинарном?

Добавлено через 22 минуты
Запись структуры NUMS в бинарный файл input.dat:

C++
1
2
3
4
5
6
7
8
    const char* filename = "input.dat";
    ofstream ofs(filename, ofstream::binary);
 
    NUMS* pNums = new NUMS[N];
    for (int i = 0; i < N; i++)
        pNums[i].n = rand() % 9 + 1;
 
    ofs.write((char*)pNums, sizeof(NUMS) * N);
Чтение структуры NUMS из бинарного файла input.dat:

C++
1
2
3
4
5
6
7
    NUMS* pNums = new NUMS[N];
 
    ifstream ifs(filename,ifstream::binary);
    ifs.read((char*)pNums, sizeof(NUMS) * N);
 
    for (int i = 0; i < N; i++)
        printf("%d ",pNums[i].n);
0
kompnet
41 / 1 / 0
Регистрация: 11.10.2011
Сообщений: 112
17.05.2012, 16:28  [ТС] #9
А для фамилий как? В файле есть структура в которой массив фамилий, необходимо отсортировать по возрастанию
0
kompnet
41 / 1 / 0
Регистрация: 11.10.2011
Сообщений: 112
19.05.2012, 19:55  [ТС] #10
??????????????????/????
0
zitxbit
88 / 740 / 75
Регистрация: 11.04.2012
Сообщений: 971
19.05.2012, 20:37 #11
Как только сделаю размещу. Ждите.

Добавлено через 22 минуты
Как только сделаю сразу размещу, ждите.

Добавлено через 17 минут
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
#include <string.h>
#include <locale.h>
 
#define N 10
 
typedef struct Person
{
    char name[256];
} PERSON;
 
void swaps(char* psz1, char* psz2);
bool iseqkey(char* psz1, char* psz2, int pos);
 
int main()
{
   setlocale(LC_ALL,"Russian");
 
   static PERSON pers[] = { { "Ivanov"  }, { "Petrov"  }, { "Stepanov" }, { "Sidorov" }, 
                            { "Rybakov" }, { "Abramov" }, { "Archipov" }, { "Pavlov"  }, 
                            { "Petuhov" }, { "Isakov"  } }; 
  
   for (int q = 0; q < 256; q++)
       for (int i = 0; i < N-1; i++)
            if (pers[i].name[q] > pers[i+1].name[q] && 
                iseqkey(pers[i].name,pers[i+1].name, q))
            {
                swaps(pers[i].name, pers[i+1].name);
                for (int k = i; (pers[k].name[q] < pers[k-1].name[q]) && (k >= 1); k--)
                     if (iseqkey(pers[k].name,pers[k-1].name, q))
                         swaps(pers[k].name,pers[k-1].name);
            }
 
    for (int q = 0; q < N; q++)
        printf("%s\n",pers[q].name);
 
    return 0;
}
 
bool iseqkey(char* psz1, char* psz2, int pos)
{
    for (int i = pos-1; i >= 0; i--)
        if (psz1[i] != psz2[i])
            return false;
 
    return true;
}
 
void swaps(char* psz1, char* psz2)
{
    static char* psztemp = new char[256];
    strcpy(psztemp, psz1);
    strcpy(psz1, psz2); 
    strcpy(psz2, psztemp);
}
http://liveworkspace.org/code/f90d743e2578b06b5b47e3084ff25f4a
0
kompnet
41 / 1 / 0
Регистрация: 11.10.2011
Сообщений: 112
20.05.2012, 14:42  [ТС] #12
Фамилии уже есть в бинарном файле
0
zitxbit
88 / 740 / 75
Регистрация: 11.04.2012
Сообщений: 971
20.05.2012, 16:21 #13
Формат бинарного файла?
0
kompnet
41 / 1 / 0
Регистрация: 11.10.2011
Сообщений: 112
20.05.2012, 17:09  [ТС] #14
. txt

Добавлено через 11 минут
Я вам в личку прислал сообщение
0
zitxbit
88 / 740 / 75
Регистрация: 11.04.2012
Сообщений: 971
20.05.2012, 17:11 #15
Так я не понял бинарный файл или текстовый (.txt)?
0
20.05.2012, 17:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2012, 17:11
Привет! Вот еще темы с ответами:

Быстрая сортировка (сортировка Хоара) для связных списков - C++
есть у кого готовый алгоритм? или подскажите как реализовать

Быстрая сортировка(сортировка Хоара). Отсортировать фрагмент массива - C++
Мне нужно отсортировать фрагмент массива, расположенный между первым и последним отрицательным элементом. Немогу понять как устоновить...

Сортировка Шелла и пирамидальная сортировка для символов - C++
Здраствуйте, можете пожалуйста привести пример сортировок шелла и пиромидальной сортировки для символов, а то ничего не могу ...

Быстрая сортировка (сортировка методом Хоара) - C++
Ввести массив x1,x2,...,x20 в диапазоне . Требуется расположить отрицательные элементы в порядке убывания. Вывести массивы до и после...


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

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

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