• 冒泡算法应用(坐标Y值降序X值升序)


    今天有个客户需求是有一坐标数组,希望按Y值降序X值升序排列,我临时写了个算法。
    先写个坐标类:
    class XYZ
    {
        public XYZ() { }
        public XYZ(double x, double y)
        {
            _X = x;
            _Y = y;
        }
        double _X, _Y;
        public double X
        {
            set { _X = value; }
            get { return _X; }
        }
        public double Y
        {
            set { _Y = value; }
            get { return _Y; }
        }
    }
    冒泡排序:
    XYZ xyz0 = new XYZ(45);
    XYZ xyz1 = new XYZ(32);
    XYZ xyz2 = new XYZ(21);
    XYZ xyz3 = new XYZ(22);
    //
    XYZ[] arrXYZ = new XYZ[] { xyz0, xyz1, xyz2, xyz3 };
    XYZ xyzTmp = new XYZ();
    for (int i = 0; i < arrXYZ.Length; i++)
    {
        for (int j = 0; j < arrXYZ.Length - 1 - i; j++)
        {
            if (arrXYZ[j].Y < arrXYZ[j + 1].Y)//按Y值降序排列
            {
                xyzTmp = arrXYZ[j];
                arrXYZ[j] = arrXYZ[j + 1];
                arrXYZ[j + 1] = xyzTmp;
            }
        }
    }
    //在以Y值分组
    List<double> listDb = new List<double>();
    for (int i = 0; i < arrXYZ.Length; i++)
    {
        if (!listDb.Contains(arrXYZ[i].Y))
            listDb.Add(arrXYZ[i].Y);
    }
    //再以X值升序排列
    for (int k = 0; k < listDb.Count; k++)
    {
        for (int i = 0; i < arrXYZ.Length; i++)
        {
            for (int j = 0; j < arrXYZ.Length - 1 - i; j++)
            {
                if (arrXYZ[j].Y != listDb[k] || arrXYZ[j + 1].Y != listDb[k]) continue;
                //这里要找出Y值相同的。
                if (arrXYZ[j].X > arrXYZ[j + 1].X)
                {
                    xyzTmp = arrXYZ[j];
                    arrXYZ[j] = arrXYZ[j + 1];
                    arrXYZ[j + 1] = xyzTmp;
                }
            }
        }
    }

    for (int i = 0; i < arrXYZ.Length; i++)
    {
        MessageBox.Show(arrXYZ[i].X + "," + arrXYZ[i].Y);
    }
    用Linq简练多了:
    private List<XYZ> sortYandX(List<XYZ> listXy)
    {
        var query = from element in listXy
                    orderby element.Y descending, element.X ascending
                    select element;
        return new List<XYZ>(query);
    }
    List<XYZ> listXYZ = new List<XYZ>();
    listXYZ.Add(xyz0);
    listXYZ.Add(xyz1);
    listXYZ.Add(xyz2);
    listXYZ.Add(xyz3);
    foreach (XYZ xyz in sortYandX(listXYZ))
    {
        MessageBox.Show(xyz.X + "," + xyz.Y);
    }
    临时时想了下,对算法之类很陌生,敬请高手指教。
  • 相关阅读:
    Linux w命令
    01.drf文档及外键字段反序列化
    redis的参数解释
    redis集群复制和故障转移
    codis原理及部署_01
    redis 主从哨兵02
    redis 主从哨兵01
    redis持久化
    redis python操作
    redis cluster
  • 原文地址:https://www.cnblogs.com/greatverve/p/Bubble-Sort-algorithm.html
Copyright © 2020-2023  润新知