آموزش Swapping اعداد صحیح بدون تعریف متغیر اضافی در سی، سی++ و پایتون

برای Swapping اطلاعات در زبان سی و سی++ معمولا یک متغیر موقت (temp) تعریف می‌کنند که بتوان اینکار را انجام داد. اما در مورد اعداد صحیح می‌توان اینکار را بدون تعریف متغیر temp انجام داد. در زبان پایتون اینکار بسیار ساده است.

۱. سی و سی++:

الف) با تعریف متغیر جدید (temp):

#include <stdio.h>

int main()
{
    int a = 14, b = 92;

    printf("Before Swapping:\na: %d\nb: %d\n\n", a, b);

    int temp = a;
    a = b;
    b = temp;

    printf("After Swapping:\na: %d\nb: %d\n", a, b);

    return 0;
}

ب) بدون تعریف هرگونه متغیر اضافی:

#include <stdio.h>

int main()
{
    int a = 14, b = 92;

    printf("Before Swapping:\na: %d\nb: %d\n\n", a, b);

    a = a + b;
    b = a - b;
    a = a - b;

    printf("After Swapping:\na: %d\nb: %d\n", a, b);

    return 0;
}

کد بالا را می‌توان به صورت خلاصه‌تر، در یک خط نوشت:

a = (a + b) - (b = a);

نکته‌ای که در کدهای بالا وجود دارد این است که اگر a و b اعداد بزرگی باشند، احتمال Overflow وجود دارد. برای همین می‌توان بجای استفاده از اپراتور جمع، از اپراتور بیتی XOR استفاده کرد. به کد زیر دقت کنید:

#include <stdio.h>

int main()
{
    int a = 14, b = 92;

    printf("Before Swapping:\na: %d\nb: %d\n\n", a, b);

    a = a ^ b;
    b = a ^ b;
    a = a ^ b;

    printf("After Swapping:\na: %d\nb: %d\n", a, b);

    return 0;
}

کد بالا را می‌توان به صورت خلاصه‌تر، در یک خط نوشت:

(a = a ^ b), (b = a ^ b), (a = a ^ b);

خلاصه‌تر از آن هم می‌توان نوشت:

(a ^= b), (b ^= a), (a ^= b);

۲. پایتون:

در پایتون اینکار براحتی از طریق دستور a, b = b, a قابل انجام است. کد زیر مربوط به پایتون ۳ است:

a = 14
b = 92

print('Before Swapping:')
print('a: {}\nb: {}'.format(a, b))

a, b = b, a

print('\nAfter Swapping:')
print('a: {}\nb: {}'.format(a, b))