Выбор сортировки в C неоднозначность - PullRequest
0 голосов
/ 30 ноября 2018

Ниже код работает нормально, но 2-й код не работает, я не уверен, что пошло не так.

#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>

void swap(int *xp, int *yp)
{
    int temp = *xp;
    *xp = *yp;
    *yp = temp;
}

int main(void)
{
    int a[100], i, j, n, temp, min_idx, min;
    printf("\nEnter how many numbers\n");
    scanf("%d", &n);
    printf("\nEnter %d numbers to be sorted\n", n);
    for (i = 0; i < n; i++)
        scanf("%d", &a[i]); //take input

    for (i = 0; i < (n - 1); i++)
    {
        min_idx = i;
        for (j = (i + 1); j < n; j++)
            if (a[j] < a[min_idx])
                min_idx = j;
        swap(&a[min_idx], &a[i]);
    }

    printf("\nSorted array is:\n");
    for (i = 0; i < n; i++)
        printf("\na[%d] = %d", i, a[i]);
}

2-й код (изменена только часть обмена, но не работает):

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main(void)
{
    int a[100], i, j, n, temp, min_idx, min;
    printf("\nEnter how many numbers\n");
    scanf("%d", &n);
    printf("\nEnter %d numbers to be sorted\n", n);
    for (i = 0; i < n; i++)
        scanf("%d", &a[i]);

    for (i = 0; i < n; i++)
    {
        min = a[i];
        for (j = (i + 1); j < n; j++)
        {
            if (a[j] < min)
            {
                min_idx = j;
                min = a[j];
                printf("\nmin_idx = %d and j = %d", min_idx, j);
            }
        }
        temp = a[i]; //modified part
        a[i] = a[min_idx];
        a[min_idx] = a[i];

        min_idx = 0;
    }

    printf("\nSorted array is:\n");
    for (i = 0; i < n; i++)
        printf("\na[%d] = %d", i, a[i]);
}

Вывод только-

1
1
1
1
1

Только изменил логику подкачки, но не уверен, что идет не так, код не работает.Почему это работает, только если используется ссылка (&), а не при обычной замене как не во втором сегменте кода?Пожалуйста, дайте мне знать, что пошло не так, TIA.

1 Ответ

0 голосов
/ 30 ноября 2018

Здесь, я надеюсь, будет достаточно легко следить за тем, что я изменил в вашем коде.

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main(void)
{
    int a[100], i, j, n, temp, min_idx, min;
    printf("\nEnter how many numbers\n");
    scanf("%d", &n);
    printf("\nEnter %d numbers to be sorted\n", n);
    for (i = 0; i < n; i++)
        scanf("%d", &a[i]);

    for (i = 0; i < n; i++)
    {
        min = a[i];
        min_idx = i;
        for (j = (i + 1); j < n; j++)
        {
            if (a[j] < min)
            {
                min_idx = j;
                min = a[j];
                printf("\nmin_idx = %d and j = %d", min_idx, j);
            }
        }
        if (min_idx != i) {
            temp = a[i]; //modified part
            a[i] = a[min_idx];
            a[min_idx] = temp;
        }
    }

    printf("\nSorted array is:\n");
    for (i = 0; i < n; i++)
        printf("\na[%d] = %d", i, a[i]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...