现在有一个数组
例如: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# 如何实现???

解决方案 »

  1.   

    int [] aa=new int{9,12,45,62,8,,200,45,12,46,12,13,3,9,34,100,78,91}找到200,然后分成,
    {9,12,45,62,8}   {45,12,46,12,13,3,9,34,100,78,91}然后把200送进一个List~~~然后再{9,12,45} {8}送62
      

  2.   

    private int getmaxindex(int[] a)
    {
    //求最大值的下标 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,凑合改吧
      

  3.   


    [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);

    }
                 
    }
      

  4.   

    class Program
        {        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());
            }
        }