Vishal Gupta Ответов: 2

Неправильный вывод из сортировки выбора


После передачи 'EXAMPLE' в качестве входных данных вывод, показанный как 'AELMPXE', я не понимаю, почему один из 'E' не сортируется, после отслеживания программы я получил, что его не сравнивают после 2-й итерации с последним элементом, пожалуйста, помогите.

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

<pre>#include <stdio.h>
#include <stdlib.h>
#include<string.h>

void selection_sort(char a[] , int n)
{
    int pos,i,j;
    char temp;
    for(i = 0;i < n-2;i++)
    {
        pos = i;
        for(j = i + 1;j < n-1;j++)
        {
            if(a[pos] > a[j])
            {
                pos = j;
            }
        }
        temp = a[pos];
        a[pos] = a[i];
        a[i] = temp;
    }
    printf("%s",a);
}
int main()
{
    char a[30];
    int n;
    printf("Enter the string :");
    scanf("%s",a);
    n = strlen(a);
    selection_sort(a , n);
    return 0;
}

2 Ответов

Рейтинг:
1

Andy Allinger

Вы должны быть очень осторожны при написании for заявление. Если вы используете оператор сравнения <, то

for (i=0; i<n; ++i) {

выполняется для каждого элемента массива длины n, вплоть до последней позиции n-1. Он не выполняется для i == n

Он делает то же самое, что и оператор for с оператором сравнения <=
for (i=0; i<=n-1; ++i) {


CPallini

5.

Рейтинг:
0

Patrice T

Цитата:
После прохождения 'например' в качестве входных данных показано выходные AELMPXE'

Последняя буква пользовательского ввода не сортируется. Это может означать только одно: ваша процедура сортировки останавливается слишком рано, и вам нужно добавить 1 к конечному значению в процедуре сортировки.
Вы должны научиться использовать отладчик, он позволит вам видеть, как ваш код выполняется шаг за шагом.

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

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

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