#include <stdio.h> #include <stdlib.h> #include <time.h>void swap (int *a,int *b) { if (*a!=*b) { /* algorithm 1 *a+=*b; *b=*a-*b; *a-=*b; algorithm 2 *a*=*b; *b=*a/*b; *a/=* b; algorithm 3 tmp=*a; *a=*b; *b=tmp; algorithm 4*/ *a^=*b; *b^=*a; *a^=*b; }}int random (int i,int j) { if (i==0) return rand ()% (j+1); else return rand ()% (j-i+1) +i;} Void randswap1 (int a[],int n) { int i,j,rd; Srand (Time (0)); for (i=0;i<n;i++) { rd=random (1,n); for (j=0;j<i;j++) { if (Rd==a[j]) &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&Nbsp; { j=-1; rd=random (1,n); } } A[i]=rd; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;}}VOID&NBSP;RANDSWAP2 (int a[],int n) { int I,rd,*used; used= (int*) malloc (n*sizeof (int)); for (i=0;i<n;i++ ) used[i]=0; srand (Time (0)); for (i=0;i<n;i++) { rd= Random (1,n); while (1) { &nbSp; if (Used[rd-1]) rd=random (1,n); else break; } A[i]=rd; used[rd-1]=1; &NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;}}VOID&NBSP;RANDSWAP3 (int a[],int n) { int i; srand (Time (0)); for (i=0;i<n;i++) swap (A+i,a+random (0,i));} Int main () { int i,n,*a; printf ("n="); &NBSP;&NBSP;SCANF ("%d", &n); a= (int *) malloc (n*sizeof (int)); randswap1 (a,n); for (i=0;i<n;i++) printf ("%d ", A[i]); printf ("\ n"); &NBSP;RANDSWAP2 (a,n); for (i=0;i<n;i++) printf ("%d ", A[i]); printf ("\ n"); randswap3 (A,n); for (i=0;i<n;i++) printf ("%d ", A [i]); printf ("\ n"); return 0;}
This article is from the "10019822" blog, please be sure to keep this source http://10029822.blog.51cto.com/10019822/1675860
Data structure and algorithm analysis (C language Edition) Chapter II Exercise 2.7 Code implementation