Выбор сортировки в C неоднозначность
Ниже код работает нормально, но 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 ответ
Здесь, я надеюсь, будет достаточно легко следить за тем, что я изменил в вашем коде.
#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]);
}