COMPGROUPS.NET | Search | Post Question | Groups | Stream | About | Register

### problem 2.1.2 from "how to solve it by computer, Dromey"

• Email
• Follow

```I am a beginner in learning algo..So please bear with me..

2.1.2 Design an algorithm that makes following exchanges of 3 varioubles..

a-->b-->c--|
^          |
^----------|

So
a_temp = a;
b_temp = b;
c_temp = c;

a=c_temp;
c=b_temp;
b=a_temp;

I know this process looks ugly. Can anyone suggest a good one so that I could learn.
```
 0

See related articles to this posting

```sathyashrayan wrote:
>
> I am a beginner in learning algo..So please bear with me..
>
> 2.1.2 Design an algorithm that makes following exchanges of 3 varioubles..
>
> a-->b-->c--|
> ^          |
> ^----------|
>
> So
> a_temp = a;
> b_temp = b;
> c_temp = c;
>
> a=c_temp;
> c=b_temp;
> b=a_temp;
>
> I know this process looks ugly. Can anyone suggest a good one so that I could learn.

temp = c
c = b
b = a
a = temp

--
pete
```
 0
Reply pfiland (6614) 7/29/2012 4:03:10 AM

```pete wrote:
>
> sathyashrayan wrote:
> >
> > I am a beginner in learning algo..So please bear with me..
> >
> > 2.1.2 Design an algorithm
> > that makes following exchanges of 3 varioubles..
> >
> > a-->b-->c--|
> > ^          |
> > ^----------|
> >
> > So
> > a_temp = a;
> > b_temp = b;
> > c_temp = c;
> >
> > a=c_temp;
> > c=b_temp;
> > b=a_temp;
> >
> > I know this process looks ugly.
> > Can anyone suggest a good one so that I could learn.
>
> temp = c
>    c = b
>    b = a
>    a = temp

If you were in a situation where you might
not be guaranteed to have a temp variable
suitable for the values of the variables in question,
but if you had a way to swap values between variables,
then something like this would work:

SWAP(b, c);
SWAP(a, b);

In C, that could look like this:

/* BEGIN new.c */

#include <stdio.h>

#define SWAP(X, Y) (swap(&X, &Y, sizeof X))

void swap(void *arg1, void *arg2, size_t size)
{
unsigned char temp;
unsigned char *a1 = arg1;
unsigned char *a2 = arg2;

while (size-- != 0) {
temp  = *a1;
*a1++ = *a2;
*a2++ = temp;
}
}

int
main(void)
{
int a = 1;
int b = 2;
int c = 3;

printf("(a) is %d\n", a);
printf("(b) is %d\n", b);
printf("(c) is %d\n", c);

putchar('\n');

SWAP(b, c);
SWAP(a, b);

printf("(a) is %d\n", a);
printf("(b) is %d\n", b);
printf("(c) is %d\n", c);
return 0;
}

/* END new.c */

--
pete
```
 0
Reply pfiland (6614) 8/1/2012 4:26:20 PM

2 Replies
54 Views

Similar Articles

12/11/2013 2:22:43 PM
[PageSpeed]