• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

C#调整数组顺序,让奇数位于偶数前面的算法

OC/C/C++ 水墨上仙 2836次浏览

C#调整数组顺序,让奇数位于偶数前面的算法

转自:http://blog.csdn.net/ywjun0919/

#region 调整数组顺序使奇数位于偶数前面  
/// <summary>  
/// 输入一个 整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分  
/// Reorder中array为待排序的数组,使用组合的方式调用使用何种方法进行排序(如奇数在前,偶数在后,或能被3整除的数在前,不能被3整除的数在后)  
/// </summary>  
class Reorder  
{  
    private List<int> _array;  
    private RecorderOperator _op;  
  
    public List<int> array   
    {  
        get { return _array; }  
        set { _array = value; }  
    }  
    public RecorderOperator op  
    {  
        get { return _op; }  
        set { _op = value; }  
    }  
    public Reorder(List<int> array, RecorderOperator op)  
    {  
        _array = array;  
        _op = op;  
    }  
    public Reorder() { }  
  
    public void ReorderArray()  
    {  
        int length = array.Count;  
        int start = 0, end = length - 1;  
        while (start < end)  
        {  
            while (start < end && !op.Operator(array[start]))  
                start++;  
            while (start < end && op.Operator(array[end]))  
                end--;  
            if (start < end)  
            {  
                int temp = array[start];  
                array[start] = array[end];  
                array[end] = temp;  
            }  
        }  
    }  
  
    public void Print()  
    {  
        array.ForEach(a=>Console.Write(a+"  "));  
        Console.WriteLine();  
    }  
}  
class RecorderOperator  
{  
     public virtual bool Operator(int n)  
     {  
         return false;  
     }  
}  
class ConcreteRecorderOperator1:RecorderOperator  
{  
    public override bool  Operator(int n)  
    {  
        return (n & 0x1)==0;  
    }  
}  
class ConcreteRecorderOperator2 : RecorderOperator  
{  
    public override bool Operator(int n)  
    {  
        return n%3!=0;  
    }  
}  
#endregion  
class Test{  
    public void ReorderTest()   
    {  
        RecorderOperator op1 = new ConcreteRecorderOperator1();  
        Reorder reorder = new Reorder(new List<int>{2,3,4,9,5},op1);  
        Console.WriteLine("所有奇数位于数组的前半部分,所有偶数位于数组的后半部分");  
        reorder.Print();  
        reorder.ReorderArray();  
        reorder.Print();  
        RecorderOperator op2 = new ConcreteRecorderOperator2();  
        reorder.op = op2;  
        reorder.ReorderArray();  
        Console.WriteLine("能被3整除的数在前,不能被3整除的数在后");  
        reorder.Print();  
    }  
}  
class Program  
{  
     
    static void Main(string[] args)  
    {  
        Test t = new Test();  
        t.ReorderTest();  
       
    }  
} 


喜欢 (0)
加载中……