標籤:資料結構與演算法分析(c語言版)第二章習題2.7代碼實現
#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;}
本文出自 “10019822” 部落格,請務必保留此出處http://10029822.blog.51cto.com/10019822/1675860
資料結構與演算法分析(C語言版)第二章習題2.7代碼實現