递归函数
void Found(int a[], int l, int r, int& min1, int& min2)//递归函数
{
if (l==r) {//原数组并没有改变,通过左右标记位置来实现数组序列的划分
if (a[l] < min1)//比最小的还小
{
min2 = min1; min1 = a[l];
}
if ((a[l] > min1) && (a[l] < min2))//处于两者之间
min2 = a[l];
}
else//利用分治思想,将数组序列不断切成左右序列,直到成为原子序列(只包含一个元素)
{
Found(a,l, (l + r) / 2,min1,min2);
Found(a, ((l + r) / 2)+1,r, min1, min2);
}
}
主函数
int main() {
int min1, min2;
int a[20];
for (int i = 0; i < 20; i++)
//a[i] = (rand()%(200));
a[i] = rand();
min1 = a[0]; min2 = a[1];
Found(a, 0, 19, min1, min2);
cout << "最小元素:"<<min1 << " 第二小元素:" << min2 << endl;
cout << "原数组元素为:" << endl;
for (int i = 0; i < 20; i++)
cout << a[i] << " ";
return 0;
}