北航计算机机试10判断整数数组相同06排序与数组内容结合
两个整数数组(无序,可有重复元素),判断两个整数数组是否完全相同(重复元素的话,重复次数也要相同)
不知道谁有完整的题目。。
我对北航题目的理解能力有点差–
首先无序重复,若判断是否完全相同的话,最简单的方法我觉得就是先比较数组长度,长度相同的话再排序,然后依次比较,有不同就return,最坏的情况下就是前n-1个元素都相同,第n个元素不同,比较了n次,但最坏情况下也是线性的,算上排序的时间复杂度应该是o(nlogn+n)
这里因为是整数排序,我选用了快速排序,也可以用堆排序,这两个的时间复杂度都是o(nlogn)
quicksort(int a[],int l,int r,int n)
{//l=0;r=n-1,n是元素个数,l和r分别是区间下标
if(l < r)
{ int s=partition(a,l,r,n);
quicksort(a,l,s-1,s-l);
quicksort(a,s+1,r,r-s);//递归调用再对子数组排序,此处先对长度小的排序会提高效率
}
}
int partition(int a[],int l,int r,int n)
{
int p=a[l];
int i=l;
int j=r+1;
do{
do{
i+=1;
}while(a[i]>=p);
do{
j-=1;
}while(a[j]<=p);
swap(a,i,j);
}while(i>=j);
swap(a,i,j);//当i>=j撤销最后一次交换
swap(a,l,j);
return j;
}
void swap(int a[],int l,int r)
{
int temp;
temp=a[l];
a[l]=a[r];
a[r]=temp;
}
06年的题目
写一个函数 set_same(int a[],int len1,int b[],int len2) 判断数组a和b所含元素是否都相同 就是说
如果把a和b所含元素按成两个集合 判断是两个集合是否相等 既然是集合 那就不考虑重复元素和顺序了
基本上是一模一样的,只不过这个说明是集合,所以不可能有重复的元素,直接快排就行了。