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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 5.00
b0n4b
2 / 2 / 0
Регистрация: 16.11.2011
Сообщений: 100
23.11.2011, 00:49     Сортировка вставкой #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
#include <stdio.h>
#include <conio.h>
 
int main()
{
    int a[4];
    int n, i, j, x;
    printf ("Enter the number of elements ");
    scanf ("%d", &n);
    for (i=0; i<n-1; i++)
    {       
        printf ("%d's = ", i+1);
        scanf ("%d", &a[i]);
    }
    for (i=1; i<n-1; i++)
    {       
        x=a[i];
        j=i-1;
        if (j>=0 && x<a[j])
        {
            a[j-1]=a[j];
            j=j-1;
        }
        else
        {
            a[j+1]=x;
        }
    }
    printf ("Sort ");  
    for (i=0; i<n-1; i++)
    {   
        printf ("%d ", a[i]);
    }
    getch ();
    return 1;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
мфьз
3 / 3 / 1
Регистрация: 07.05.2011
Сообщений: 46
23.11.2011, 02:15     Сортировка вставкой #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
26
27
28
29
30
31
32
33
34
#include <stdio.h>
int main(int argc, char *argv[])
{
int n;
  printf ("vvedite razmer massiva: ");
  scanf ("%d",&n);
  int a[n];
  printf ("Vvedite elementi massiva: ");
  for ( int i=0;i<n;i++){
  scanf ("%d",&a[i]);
}
   printf("Ishodnii massiv: ");
for ( int i=0;i<n;i++){
   printf ("%d\t",a[i]);
  }
int temp;
    int j;
    for (int i=0;i<n;i++)
    {
        temp=a[i];
        j=i-1;
        while ((j>=0)&&(a[j]>temp))
        {
            a[j+1]=a[j];
            j=j-1;
            a[j+1]=temp;
        }
    }
 printf("\n Otsortirovanii massiv: ");
for ( int j=0;j<n;j++){
   printf ("%d\t",a[j]);
  }
    return 0;
}
b0n4b
2 / 2 / 0
Регистрация: 16.11.2011
Сообщений: 100
23.11.2011, 09:30  [ТС]     Сортировка вставкой #3
Мне надо найти ошибку. Не хочу тупо сдирать готовый код
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
23.11.2011, 09:47     Сортировка вставкой #4
Цитата Сообщение от b0n4b Посмотреть сообщение
Мне надо найти ошибку. Не хочу тупо сдирать готовый код
Исправленный кусок вашей программы:
C++
1
2
3
4
5
6
7
8
9
10
11
for (i=1; i<n; i++)
        {       
                x=a[i];
                j=i-1;
                while (j>=0 && x<a[j])
                {
                        a[j+1]=a[j];
                        j=j-1;
                }
                a[j+1]=x;
        }
b0n4b
2 / 2 / 0
Регистрация: 16.11.2011
Сообщений: 100
23.11.2011, 10:13  [ТС]     Сортировка вставкой #5
Благодарю. А не могли бы пояснить почему именно так?
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
23.11.2011, 10:19     Сортировка вставкой #6
Лучше вам почитать описание данного алгоритма. Если бы за один проход по массиву (как у вас) можно было отсортировать весь массив, то такая сортировка была бы самой востребованной))
Yandex
Объявления
23.11.2011, 10:19     Сортировка вставкой
Ответ Создать тему
Опции темы

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