交换数值后输出数值改变,且未交换成功

样例中的arr[0]交换后,再在后面交换一次后,就不见了,而最小值却储存了两个。

img

img

img

分别记录最大值及其下标、最小值及其下标,然后交换:

#include <stdio.h>

int main()
{
    int n;
    int num[10];
    int i = 0;

    scanf("%d", &n);

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

    int tmp;
    int imax = num[0];
    int imin = num[0];
    int idx_max = 0;
    int idx_min = 0;

    for (i = 1; i < n; i++)
    {
        if (num[i] > imax)
        {
            imax = num[i];
            idx_max = i;
        }
        else if (num[i] < imin)
        {
            imin = num[i];
            idx_min = i;
        }
            
    }

    tmp = num[n - 1];
    num[n - 1] = imax;
    num[idx_max] = tmp;

    tmp = num[0];
    num[0] = imin;
    num[idx_min] = tmp;


    for (i = 0; i < n; i++)
        printf("%d ", num[i]);

    return 0;
}