Anonygeeker Ответов: 5

Сортировка цифр числа


Мне нужно отсортировать 4 цифры числа.
Моя логика(своего рода пузырь) не работает.
В чем тут проблема?

Что я уже пробовал:

for(i=0;i<4;i++){
                scanf("%d",&a[i]);
        }

for(i=0;i<=4;i++){
                for(j=0;j<=4-i-1;j++){
                        if(a[j]>a[j+1]){
                                t=a[j];
                                a[j]=a[j+1];
                                a[j+1]=t;
                                printf("%d",a[j]);
                        }
                }
        }

5 Ответов

Рейтинг:
2

Richard MacCutchan

Вы опубликовали свой тот же вопрос вчера по адресу Сортировка цифр номера - дискуссионные доски C / C++ / MFC[^Пожалуйста, не перепечатывайте; вы можете отредактировать свой оригинал, чтобы добавить дополнительную информацию.


Рейтинг:
2

CPallini

Сорт должен включать в себя и то и другое a[i] и a[j]. Пробовать

#include <stdio.h>

int main()
{
  int i,j;
  char a[4];

  for(i=0;i<4;++i)
  {
    scanf("%c",&a[i]);
  }

  for(i=0; i<3; ++i)
    for(j=i+1; j<4; ++j)
    {
      if(a[i]>a[j])
      {
        char t =a[i];
        a[i]=a[j];
        a[j] = t;
      }
    }

  for ( i=0; i<4; ++i)
    printf("%c", a[i]);
  printf("\n");

  return 0;
}


Patrice T

2 решение для вас ?

CPallini

Но это не моя вина, хомячки... :-)

Patrice T

Я думал, что сказал Крису дать им несколько poutines, чтобы они были заняты где-то еще :)

Рейтинг:
2

Patrice T

for(i=0;i<=4;i++)

C основан на нуле, это означает, что массив размера 4 имеет элементы от 0 до 3, 4 не существует.
Цитата:
Моя логика(своего рода пузырь) не работает.

Если вы не понимаете, что не так в вашем коде, используйте отладчик, чтобы увидеть, как он работает.

Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что он делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
1

Leo Chapiro

Попробуйте отладить свой исходный код строка за строкой и показать в отладчике, что происходит не так.


Рейтинг:
0

Jochen Arndt

У вас есть выход из связанного массива обращений. Распечатайте использованные индексы, чтобы увидеть их:

printf("%d after swapping indexes %d and %d\n",a[j], j, j+1);

Вы должны ограничить итерации цикла количеством элементов массива.

Для алгоритма сортировки пузырьков ищите примеры, например: [^].