#include<stdio.h> #include<stdlib.h> #include<time.h> void swap(int *a,int *b) { if(*a!=*b) { /* 算法1 *a+=*b; *b=*a-*b; *a-=*b; 算法2 *a*=*b; *b=*a/*b; *a/=*b; 算法3 tmp=*a; *a=*b; *b=tmp; 算法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]) { j=-1; rd=Random(1,n); } } A[i]=rd; } } void 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) { if(used[rd-1]) rd=Random(1,n); else break; } A[i]=rd; used[rd-1]=1; } } void 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="); scanf("%d",&n); A=(int *)malloc(n*sizeof(int)); randSwap1(A,n); for(i=0;i<n;i++) printf("%d ",A[i]); printf("\n\n"); randSwap2(A,n); for(i=0;i<n;i++) printf("%d ",A[i]); printf("\n\n"); randSwap3(A,n); for(i=0;i<n;i++) printf("%d ",A[i]); printf("\n\n"); return 0; }
时间: 2024-10-12 03:00:06