现在有一个数组
例如:int [] aa=new int{9,12,45,62,8,,200,45,12,46,12,13,3,9,34,100,78,91}
1,首先找出这个数组中最大的数字.
2,然后,以这个最大数字的界,分成两组,然后,再求出这两组的的最大值,再以各组的最大值,分成两组,再求出最大值,如此类推.直至列举任一组只剩下两个数为止!
3.把这些最大数以数组的形式存储下来!我想了很长时间都不知道,怎样算了,请问 C# 如何实现???
例如:int [] aa=new int{9,12,45,62,8,,200,45,12,46,12,13,3,9,34,100,78,91}
1,首先找出这个数组中最大的数字.
2,然后,以这个最大数字的界,分成两组,然后,再求出这两组的的最大值,再以各组的最大值,分成两组,再求出最大值,如此类推.直至列举任一组只剩下两个数为止!
3.把这些最大数以数组的形式存储下来!我想了很长时间都不知道,怎样算了,请问 C# 如何实现???
{9,12,45,62,8} {45,12,46,12,13,3,9,34,100,78,91}然后把200送进一个List~~~然后再{9,12,45} {8}送62
{
//求最大值的下标 i
console.writeln(i.tostring());
}private void getMaxnum(int[] a)
{
int[] a1;
int[]a2;
int i=getmaxindex(a); if(a.lenth>2)
{
a1=Array.copy(a,0,a1,0,i-1);
a2=Array.copy(a,i+1,a2,0,a.length-i-1);
getMaxnum(a1);
getMaxnum(a2);
}}
程序没调试,外网没.net,凑合改吧
[STAThread]
static void Main(string[] args)
{
int [] a=new int[]{9,12,45,62,8,200,45,12,46,12,13,3,9,34,100,78,91};
Class1.findmax(a);
}
static void findmax(int [] v)
{
int max=v[0];
int pos=0;
//找出最大者
for(int i=1;i<v.Length;i++)
{
if(v[i]>max)
{
max=v[i];
pos=i;
}
}
Console.WriteLine(max.ToString());
int []a1=new int[pos+1];
int []a2=new int[v.Length-pos-1];
if(pos>0 && pos<v.Length-1)
{
Array.Copy(v,0,a1,0,pos-1);
Array.Copy(v,pos+1,a2,0,v.Length-pos-1);
}
if(pos==0)
{
Array.Copy(v,1,a2,0,v.Length-1);
}
if(pos==v.Length-1)
{
Array.Copy(v,0,a1,0,v.Length-1);
}
if(a1.Length>2)
{
Class1.findmax(a1);
}
if(a2.Length>2)
{
Class1.findmax(a2);
}
}
{ static void Main(string[] args)
{
int[] nums = new int[] {9,12,45,62,8,200,45,12,46,12,13,3,9,34,100,78,91}; //用来放结果的list
List<int> result = new List<int>(); SplitArrayByMax(result, nums); Console.Read();
}
static void SplitArrayByMax(List<int> result, int[] nums){
if (nums.Length <= 2) {
return;
}
int maxIndex = 0;//数组的最大下标
for (int i = 1; i < nums.Length; i++) {
if (nums[i] > nums[maxIndex]) maxIndex = i;
}
result.Add(nums[maxIndex]);
Console.WriteLine(nums[maxIndex]);
List<int> left=new List<int>();
List<int> right=new List<int>();
for(int i=0;i<nums.Length;i++){
if (i < maxIndex) {
left.Add(nums[i]);
}else if (i > maxIndex) {
right.Add(nums[i]);
}
}
SplitArrayByMax(result, left.ToArray());
SplitArrayByMax(result, right.ToArray());
}
}