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

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

Восстановить пароль Регистрация
 
jon_illien
2 / 2 / 1
Регистрация: 14.08.2012
Сообщений: 78
27.08.2012, 00:18     Сортировка вставками #1
Где-то ошибка в цикле... помогите)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
...
 
int array[3] = {3, 2, 1}, min = 0,  a = 0,  b = 0;
 
...
 
for(a = 1; a < size; ++a);
{
    
    for(b = 0; b < a; ++b);
    {
        if(array[a] < array[b])
        {
            min = array[b];
            array[b] = array[a];
            array[a] = min;
        }
    }
}
 
...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.08.2012, 00:18     Сортировка вставками
Посмотрите здесь:

Сортировка вставками C++
Сортировка вставками C++
C++ Сортировка вставками
Сортировка вставками C++
Сортировка вставками. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
27.08.2012, 00:25     Сортировка вставками #2
Алгоритмы сортировок
jon_illien
2 / 2 / 1
Регистрация: 14.08.2012
Сообщений: 78
27.08.2012, 00:33  [ТС]     Сортировка вставками #3
Цитата Сообщение от Jupiter Посмотреть сообщение
нееееее.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,058
27.08.2012, 01:08     Сортировка вставками #4
Цитата Сообщение от jon_illien Посмотреть сообщение
нееееее.
очень содержательно
ошибка то в чем выражается??
jon_illien
2 / 2 / 1
Регистрация: 14.08.2012
Сообщений: 78
27.08.2012, 01:23  [ТС]     Сортировка вставками #5
Цитата Сообщение от ValeryS Посмотреть сообщение
очень содержательно
ошибка то в чем выражается??
да, выражалась..., чуть-чуть подредактировал. спасибо


C++
1
2
3
4
5
6
7
8
for (a = 1; a < size; ++a) 
    min = array[a]; 
    for (b = a - 1; b >= 0 && array[b] > min; --b)
    {
        array[b + 1] = array[b];
        array[b ] = min;
    }
}
ovli
0 / 0 / 0
Регистрация: 04.08.2012
Сообщений: 16
05.09.2012, 12:49     Сортировка вставками #6
Доброго времени суток, не могу понять как работает код сортировки вставками, пришлось зубрить, а я этого органически не перевариваю, кто нибудь может помочь...
C++
1
2
3
4
5
6
7
8
9
10
11
12
void insertSort(T a[],int size)
{
T x;
int i,j;
for(i=0;i<size;i++)
{
    x=a[i];
    for(j=i-1;j>=0&&a[j]>x;j--)
        a[j+1]=a[j];
    a[j+1]=x;
}
}
1. входим в первый цикл и присваиваем переменной х значение элемента стоящего под № 0 ноль
2. Смотрим на второй цикл и сразу возникает вопрос: почему он без фигурных скобок?
3. Проверяем условие цикла 2, и видим при i=0 j=i-1 j=-1...условие цикла 2 не выполнено и не выполняется никаких действий.
4. Происходит возврат к циклу 1 и становится равным i=1
5. x присваивается x=a[1]
6. смотрим цикл N 2 j=1-1, соответственно j=0, тогда выполняется часть условия j>=0&&a[j]>x, и допустим, что a[j]>x, т.е впереди стоящий элемент больше следующего, будем считать условие выполнено
7.a[j+1]=a[j] элементу a[j+1] присваивается значение a[j] и что по сути равносильно a[i]=a[j] ведь i на одну единицу больше j, а затем a[j+1]=x присваевается значение х, и тут получается абракадабра, или все возвращается назад, a[j+1] присваевается значение предидущее значение a[j+1]...Потом j уменьшается на 1
Короче не фига не понял
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
05.09.2012, 14:41     Сортировка вставками #7
ovli у тебя ошибка в первом цикле. i должна равняться 1.
вот пример работающего кода


Сортировка вставками
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
#include <iostream> 
using namespace std; 
 
void InterSort(int* array, int size)  
{  
    int temp; 
    int i, j; 
 
    for ( i = 1; i < size; i++)  
    { 
         temp = array[i]; 
         for ( j = i - 1; j >= 0 && array[j] > temp; --j) 
             array[j+1] = array[j];
             array[j+1] = temp; 
    } 
}
 
 
int main() 
{   
    setlocale(0, "rus");
    const int size = 10;
    int array[size] = { 12, 56, 7, 8, 11, 23, 45, 89, 54, 33 };  
    unsigned int i;
 
    cout << "Исходный массив " << endl;
    for ( i = 0; i < size; i++) 
        cout << array[i] << " "; 
    cout << endl << endl;  
 
    InterSort(array, size);
    cout << "Отсортированный массив " << endl; 
 
    for ( i = 0; i < size; i++) 
        cout << array[i] << " "; 
    cout << endl; 
}


теперь по самой сортировки

C++
1
2
3
4
5
6
7
8
9
10
int temp; 
    int i, j; 
 
    for ( i = 1; i < size; i++)  
    { 
         temp = array[i]; 
         for ( j = i - 1; j >= 0 && array[j] > temp; --j) 
             array[j+1] = array[j];
             array[j+1] = temp; 
    }
1. Элементу temp присваивается второй элемент в массиве
2. j на один меньше чем i в данном случае первый элемент
3 если j ,больше или равно 0 и первый элемент больше впереди стоящего они меняются местами

В общем сортировка начинается со второго элемента и элементы упорядочиваются с левой стороны от данной итерации цикла.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.09.2012, 15:05     Сортировка вставками
Еще ссылки по теме:

C++ сортировка вставками
C++ Сортировка вставками
Сортировка вставками C++

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

Или воспользуйтесь поиском по форуму:
ovli
0 / 0 / 0
Регистрация: 04.08.2012
Сообщений: 16
05.09.2012, 15:05     Сортировка вставками #8
Спасибо, но ошибка не у меня, а в учебном материале "Шага"
Миниатюры
Сортировка вставками  
Yandex
Объявления
05.09.2012, 15:05     Сортировка вставками
Ответ Создать тему
Опции темы

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