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

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

Войти
Регистрация
Восстановить пароль
 
 
ALYX
1 / 1 / 0
Регистрация: 24.01.2009
Сообщений: 14
#1

Сортировка методом Вставок - C++

01.10.2009, 15:10. Просмотров 20681. Ответов 25
Метки нет (Все метки)

Вот собственно вопрос. Масив записей структура которого конечная остановка, и время прибытия, нужно посортировать по направлению.

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 <iostream.h>
#include <stdlib.h>
#include <conio.h>
 
struct rep
{
char route[20];
char time[5];
};
 
int main() {
clrscr();
rep mas[20];
rep temp;
int kil,i,j;
cout<<"Enter number of Routes: ";
cin>>kil;
for (i=0; i<kil; i++)
{
    cout<<"Enter Destination: ";
    cin>>mas[i].route;
    cout<<"Enter Time of Arriving: ";
    cin>>mas[i].time;
}
        for (i = 0; i < kil; i++)
        {
        temp=mas[i];
        for (j = i - 1; j >= 0 && mas[j].route > temp.route; j--)
            mas[j + 1] = mas[j];
            mas[j + 1] = temp;
        }
 
clrscr();
for (i=0; i<kil; i++)
{
cout<<mas[i].route<<" - "<<mas[i].time<<endl;
}
getch();
return 0;
}
Вот мой код но он почему то не сортирует так как надо хз почему уже даже незнаю в чём проблема?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.10.2009, 15:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка методом Вставок (C++):

Сортировка методом вставок - C++
Заполнить массив размером 20 случайными числами в диапазоне от 0 до 200. Во второй массив выбрать все двузначные элементы, отсортированные...

Сортировка методом вставок - C++
Заполнить массив размером 20 случайными числами в диапазоне от 0 до 200. Во второй массив выбрать все двузначные элементы, отсортировать...

Сортировка методом простых вставок - C++
Сортировка методом простых вставок - алгоритм S с. Вычисление трудоемкости Замер времени для отсортированного массива, отсортированного в...

Сортировка методом центрированных вставок - C++
Доброго времени суток. Помоги доделать программу. Я решил сделать эту сортировку через массивы(возможно зря)). И теперь, допусти если у...

Сортировка списка методом простых вставок - C++
Помогите сделать чтобы в программе были двусвязные списки и чтобы списки из файла выводились в нормальном порядке (как в файлах), а не с...

Сортировка диагоналей матрицы методом Шелла/вставок - C++
Дана матрица размерностью n*n, содержащая целые числа. Отсортировать диагонали матрицы, параллельные побочной, по возрастанию элементов...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
R0mm
Псевдо программист
192 / 113 / 15
Регистрация: 19.09.2009
Сообщений: 303
01.10.2009, 16:15 #2
Сортировка вставками
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template
void insertSort(T a[], long size) {
  T x;
  long i, j;
 
  for ( i=0; i < size; i++) {  // цикл проходов, i - номер прохода
    x = a[i];   
        // поиск места элемента в готовой последовательности 
    for ( j=i-1; j>=0 && a[j] > x; j--)
      a[j+1] = a[j];    // сдвигаем элемент направо, пока не дошли
        // место найдено, вставить элемент
    a[j+1] = x;
  }
}
2
ALYX
1 / 1 / 0
Регистрация: 24.01.2009
Сообщений: 14
01.10.2009, 18:19  [ТС] #3
Так вроде всё правильно но не сортирует.
0
M128K145
Эксперт С++
8288 / 3508 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
01.10.2009, 19:26 #4
ALYX, C++ FAQ
0
R0mm
Псевдо программист
192 / 113 / 15
Регистрация: 19.09.2009
Сообщений: 303
01.10.2009, 19:46 #5
Цитата Сообщение от ALYX Посмотреть сообщение
char route[20];
Цитата Сообщение от ALYX Посмотреть сообщение
mas[j].route > temp.route
перегрузи операцию сравнивания
0
Goran71
2 / 2 / 0
Регистрация: 21.11.2008
Сообщений: 67
26.11.2010, 22:22 #6
На Си++ алгоритм сортировки методом вставки будет таким
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void insertion_sort(int mas[], const int n)
{
    int key = 0, j = 0;
    for (int i = 1; i < n; i++)
    {
        key = mas[i];
        j = i - 1;
        while (j >= 0 && mas[j] > key)
        {
            mas[j + 1] = mas[j];
            j--;
        }
        mas[j + 1] = key;
    }
}
1
gorin
207 / 14 / 2
Регистрация: 18.08.2009
Сообщений: 571
22.10.2011, 18:33 #7
Привет всем мне нужно замутить сортировку массива методом вставка, вроде написал но что то не правильно сортирует! Вот мой код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    Memo1 -> Lines -> Add("Сортування вставками");
    count = 0;
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < n; j++)
        {
 
            if(mas[j] > mas[j+1])
            {
                x = mas[j];
                mas[j] = mas[j + 1];
                mas[j + 1] = x;
                count++;
            }
        }
        sm += IntToStr(mas[i]) + "  ";
    }
    Memo1 -> Lines -> Add(sm);
0
Thinker
Эксперт C++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
22.10.2011, 18:38 #8
Во первых, это банальная сортировка пузырьком, а не вставками. А во вторых, и та неправильная
0
gorin
207 / 14 / 2
Регистрация: 18.08.2009
Сообщений: 571
22.10.2011, 18:50 #9
Thinker, http://img-fotki.yandex.ru/get/5310/...71047d86_L.jpg
http://fotki.yandex.ru/users/gussca/view/439189/

Добавлено через 2 минуты
Thinker, может я ошибку допустил?
0
Thinker
Эксперт C++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
22.10.2011, 18:52 #10
gorin, просто поверьте на слово, а лучше почитайте более серьезную литературу или посты выше, что у вас не сортировка вставками, а обычная пузырьковая, причем неверно реализованная, так как вы обращаетесь к несуществующим элементам

Добавлено через 50 секунд
Цитата Сообщение от gorin Посмотреть сообщение
Thinker, может я ошибку допустил?
C++
1
for(int j = 0; j < n - 1; j++)
0
gorin
207 / 14 / 2
Регистрация: 18.08.2009
Сообщений: 571
22.10.2011, 18:53 #11
Thinker, а как правильно?
0
Thinker
Эксперт C++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
22.10.2011, 18:55 #12
В посте 4 есть ссылка на несколько сортировок
0
gorin
207 / 14 / 2
Регистрация: 18.08.2009
Сообщений: 571
22.10.2011, 19:27 #13
Thinker, вот этот код?
C++
1
2
3
4
5
6
7
8
  for ( i=0; i < size; i++) {  // цикл проходов, i - номер прохода
    x = a[i];   
        // поиск места элемента в готовой последовательности 
    for ( j=i-1; j>=0 && a[j] > x; j--)
      a[j+1] = a[j];    // сдвигаем элемент направо, пока не дошли
        // место найдено, вставить элемент
    a[j+1] = x;
  }
он тупо переписывает первоначальный массив
0
Thinker
Эксперт C++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
22.10.2011, 22:10 #14
gorin, не может быть, может вы не так алгоритм применили?
0
greeezz
272 / 165 / 4
Регистрация: 10.07.2011
Сообщений: 441
22.10.2011, 22:32 #15
Цитата Сообщение от gorin Посмотреть сообщение
Thinker, вот этот код?
C++
1
2
3
4
5
6
7
8
  for ( i=0; i < size; i++) {  // цикл проходов, i - номер прохода
    x = a[i];   
        // поиск места элемента в готовой последовательности 
    for ( j=i-1; j>=0 && a[j] > x; j--)
      a[j+1] = a[j];    // сдвигаем элемент направо, пока не дошли
        // место найдено, вставить элемент
    a[j+1] = x;
  }
он тупо переписывает первоначальный массив
у вас при i == 0, j будет равно -1. a[j+1] = a[j]; т.е. a[-1+1] = a[-1] как вы себе это представляете?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2011, 22:32
Привет! Вот еще темы с ответами:

Сортировка двумерного массива методом вставок с "конфеткой" - C++
Доброго времени суток. Помогите разобраться со следующим заданием (в форуме С мне не помогли): Необходимо отсортировать двумерный...

Написать программу сортировки методом простых вставок - C++
Написать программу сортировки методом простых вставок элементов массива, имеющих четные индексы.

В двумерной матрице отсортировать столбцы методом вставок - C++
помогите с задачками:) задача №1 В двумерной матрице отсортировать столбцы методом вставок задача №2 Из массива символов размером...

Создать динамический целочисленный массив, и отсортировать его методом вставок - C++
Помогите пожалуйста создать динамический целочисленный массив. Размер массива вводится с клавиатуры. Массив заполняется случайными числами,...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.10.2011, 22:32
Ответ Создать тему
Опции темы

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