冒泡算法应用(坐标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);
}
临时时想了下,对算法之类很陌生,敬请高手指教。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值