//找两个数组中的相同元素,首先对两数组分别排序
#include<stdio.h>
int Same[20];
int SameElement(int Array1[20],int Array2[20]);
void quickSort(int Array[20],int left,int right);
void main()
{
int Array1[20] = {1,21,2,22,3,23,4,24,5,25,6,26,7,27,8,28,9,29,10,30};
int Array2[20] = {1,2,3,5,4,6,8,7,9,10,11,12,13,14,15,16,20,17,18,16};
int number = SameElement(Array1,Array2);
for(int i = 0; i < number; i++ )
printf("%d ",Same[i]);
printf("\n");
}
int SameElement(int Array1[20],int Array2[20])
{
int count1 = 0,count2 = 0;
int countNum = 0;
quickSort(Array1,0,19);
quickSort(Array2,0,19);
while(count1<20&&count2<20)
{
if(Array1[count1]==Array2[count2])
{
Same[countNum] = Array1[count1];
count1++;
count2++;
countNum++;
}else
if(Array1[count1]<Array2[count2])
{
count1++;
}
else{
count2++;
}
}
return countNum;
}
void quickSort(int Array[20],int left,int right)
{
int count_left = 0;
int count_right = 19;
int temp = Array[(left+right)>>1];
while(count_left<count_right)
{
while(Array[count_left]<temp)
count_left++;
while(Array[count_right]>temp)
count_right--;
if(count_left<=count_right)
{
int tp;
tp = Array[count_left];
Array[count_left] = Array[count_right];
Array[count_right] = tp;
count_left++;
count_right--;
}
if(count_right>left) quickSort(Array,left,count_right);
if(count_left<right) quickSort(Array,count_left,right);
}
}