对比生成测试算法用例
在对两个算法进行比较时,通常需要两个或多个算法对同一个数组进行排序,所以需要先对数组进行复制
1 int* copyIntArray(int a[],int n) 2 { 3 int *arr=new int[n]; 4 copy(a,a+n,arr); 5 return arr; 6 }
使用copy函数进行数组复制
有些算法对无序数组和接近有序数组的排序性能差异较大,所以需要定义一个生成基本有序数组的函数
1 int* generateNearlyOrderedArray(int n,int swapTimes) 2 { 3 int *arr=new int[n]; 4 for(int i=0;i<n;i++) 5 arr[i]=i; 6 7 srand(time(NULL)); 8 for(int i=0;i<swapTimes;i++) 9 { 10 int posx=rand()%n; 11 int posy=rand()%n; 12 swap(arr[posx],arr[posy]); 13 } 14 15 return arr; 16 }
函数参数两个,一个是数组长度,一个是无序数对数
首先通过循环复制生成一个有序数组,然后根据srand和rand()生成随机数,并对没对随机数对应的数组元素进行交换。需要注意的是,生成的随机数需要对n取余,以保证随机数在数组长度范围内。