【面试】黑猫白猫问题

问题

一个数组,装着一些对象猫,猫有颜色属性,黑色和白色,问把所有白色猫放在黑色猫前面?如果有白、灰、黑,按白灰黑顺序排呢?

分析

1、数组中元素是引用类型不是值类型
2、引用类型的元素只能交换位置,用到Array.Sort(),或者遍历交换索引i

解决

方法一:Array.Sort(Array,(n1,n2)=>n1.Color.CompareTo(n2.Color));
方法二:手写排序方法

代码

方法一:

//白猫放在黑猫前面
namespace 黑猫白猫算法
{
    public enum SkinColor
    {
        白,黑
    }
    public class Program
    {
        static void Main(string[] args)
        {
            Cat[] CatArray = new Cat[]
            {
                new Cat{Color=SkinColor.白},                
                new Cat{Color=SkinColor.黑},                
                new Cat{Color=SkinColor.黑},                
                new Cat{Color=SkinColor.白},                
                new Cat{Color=SkinColor.黑},                
                new Cat{Color=SkinColor.白},                
                new Cat{Color=SkinColor.白},                
                new Cat{Color=SkinColor.黑},                
                new Cat{Color=SkinColor.白}
            };
            Array.Sort(CatArray,(n1,n2)=>n1.Color.CompareTo(n2.Color));
            foreach (Cat cat in CatArray)
            {
                Console.WriteLine(cat.Color.ToString());
            }
        }
    }
    public class Cat
    {
        public SkinColor Color;
    }

方法二:
把白猫全部提到前面

 Cat[] CatArray = new Cat[]
            {
                new Cat{Color=SkinColor.白},                
                new Cat{Color=SkinColor.黑},                
                new Cat{Color=SkinColor.黑},                
                new Cat{Color=SkinColor.白},                
                new Cat{Color=SkinColor.黑},                
                new Cat{Color=SkinColor.白},                
                new Cat{Color=SkinColor.白},                
                new Cat{Color=SkinColor.黑},                
                new Cat{Color=SkinColor.白}
            };
            int nCount =CatArray.Length;
            int nLength = CatArray.Length;
            int nWhite = CatArray.Count((n) => n.Color == SkinColor.白);
            int nBlack = CatArray.Count((n) => n.Color == SkinColor.黑);
            for (int i = 0; i < nWhite; i++)
            {
                if (CatArray[i].Color != SkinColor.白)
                { 
                    for(int j=i+1;j<nCount;j++)
                    {
                        if (CatArray[j].Color == SkinColor.白)
                        {
                            Cat catTemp = CatArray[i];
                            CatArray[i] = CatArray[j];
                            CatArray[j] = catTemp;
                            break;
                        }
                    }
                }
            }

            foreach (Cat cat in CatArray)
            {
                Console.WriteLine(cat.Color.ToString());
            }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值