转载于 http://www.voidcn.com/article/p-ygnpoljp-hz.html
要求求得数组中第二大数
采用分治思想解决这个问题
#include<iostream> using namespace std; //分治思想求数组中第二大的数 //low为数组低位索引,high为数组高位索引 void search(int *a,int low,int high,int *max,int *smax) { //max为最大的数,smax为数组中第二大的数 if(high-low<=1) { if(a[low]<a[high]) { *max=a[high]; *smax=a[low]; return; } else { *max=a[low]; *smax=a[high]; return; } } int lmax,lsmax,rmax,rsmax; //lmax定义为数组左半边最大的数 //lsmax为数组左半边第二大的数 //rmax定义为数组右半边最大的数 //rsmax定义为数组右半边第二大的数 //搜索数组左半边 search(a,low,low+(high-low)/2,&lmax,&lsmax); //搜索数组右半边 search(a,low+(high-low)/2+1,high,&rmax,&rsmax); if(lmax>rmax) { if(rmax>lsmax) { *max=lmax; *smax=rmax; } else { *max=lmax; *smax=lsmax; } } else { if(lmax>rsmax) { *max=rmax; *smax=lmax; } else { *max=rmax; *smax=rsmax; } } return; } int main() { int a[8]={9,7,4,6,3,19,11,12}; int smax,max; search(a,&max,&smax); cout<<max<<" "<<smax<<endl; //for test output cin>>max; return 0; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。