用分治法实现找一个序列最小值的功能
#include<iostream>
using namespace std;
void Merge(int r[],int r1[],int s,int m,int t) //合并子序列
{
int i=s,j=m+1,k=s;
while(i<=m&&j<=t)
{
if(r[i]<=r[j]) r1[k++]=r[i++]; //取r[i]和r[j]中较小者放入r1[k]
else r1[k++]=r[j++];
}
while(i<=m) //若第一个子序列没处理完,则进行收尾处理
r1[k++]=r[i++];
while(j<=t) //若第二个子序列没处理完,则进行收尾处理
r1[k++]=r[j++];
}
void MergeSort(int r[],int s,int t) //对序列r[s]~r[t]进行归并排序
{
int m,r1[1000]; //数组r1是临时数组,假设最多1000个记录
if(s==t) return ; //递归的边界条件,只有一个记录,已经有序
else
{
m=(s+t)/2; //划分
MergeSort(r,s,m); //求解子问题1,归并排序前半个子序列
MergeSort(r,m+1,t); //求解子问题2,归并排序后半个子序列
Merge(r,r1,s,m,t); //合并两个有序序列,结果存在数组r1中
for(int i=s;i<=t;i++) //将有序序列传回数组r中
r[i]=r1[i];
}
}
int main()
{
int i,n;
cout<<"please put number in it:"<<endl;
int a[10];
for(i = 0; i < 10; i++)
{
cin>>a[i];
}
cout<<"show the number:"<<endl;
for( n = 0; n < i; n++) {
cout<<a[n]<<" ";
}
cout<<endl;
cout<<"after sorting:"<<endl;
MergeSort(a,0,9); //调用归并算法进行排序
for( n = 0; n <i; n++) {
cout<<a[n]<<" ";
}
cout<<endl;
cout<<"the min is:"<<endl;
cout<<a[0]<<endl;
return 0;
}
运行截图: