今天有个客户需求是有一坐标数组,希望按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(4, 5);
XYZ xyz1 = new XYZ(3, 2);
XYZ xyz2 = new XYZ(2, 1);
XYZ xyz3 = new XYZ(2, 2);
//
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);
}

临时时想了下,对算法之类很陌生,敬请高手指教。

冒泡算法应用(坐标Y值降序X值升序)的更多相关文章

  1. 每天一道算法题(14)——N个降序数组,找到最大的K个数

     题目: 假定有20个有序数组,每个数组有500个数字,降序排列,数字类型32位uint数值,现在需要取出这10000个数字中最大的500个. 思路 (1).建立大顶堆,维度为数组的个数,这里为20( ...

  2. JAVA里List集合中的对象根据对象的某个属性值降序或者升序排序

    需要使用JDK1.8及以上 package com.stream; import java.util.Comparator; import java.util.List; public class T ...

  3. Java 将Map按Value值降序排列

    1 /** 2 * 将集合按照降序排列-FLOAT 3 * @param nowPartTwoData 4 * @return 5 */ 6 private static List<Map.En ...

  4. HTML中实现Table表头点击升序/降序排序

    题目:如下图,请实现表格信息的排序功能,当点击表头的属性区域,将表格信息进行排序切换功能,即第一次点击为降序排序,再一次点击进行升序排序. 姓名 力量 敏捷 智力 德鲁伊王 17 24 13 月之骑士 ...

  5. python读取一个英文文件,并记录每个单词出现的次数,降序输出

    对文中出现的句号,逗号和感叹号做了相应的处理 sorted排序函数用法: 按照value值降序排列: sorted(dict.items(),key=lambda k:k[1],reverse=Tru ...

  6. SQL-ORDER BY 多字段排序(升序、降序)

    ORDER BY _column1, _column2; /* _column1升序,_column2升序 */   ORDER BY _column1, _column2 DESC; /* _col ...

  7. mysql_DML_select_升序降序去重

    select *from wsb   limit 5;显示前5行 select *from students LIMIT  (m,n) (其中m是指记录开始的index,从0开始,表示第一条记录n是指 ...

  8. sql中使一个字段升序,一个字段降序

    ORDER BY _column1, _column2; /* _column1升序,_column2升序 */ ORDER BY _column1, _column2 DESC; /* _colum ...

  9. LINQ中的OrderBy实现按照两个字段升序、降序排序操作

    在公司或许有这种需求,先根据第一个某个字段按照升序排序,然后如果相同,在按照第二个某个字降序排序,我们该怎么去实现呢? 现在来教教大家分别使用Labmda和LINQ进行这种操作. 1.先按照第一个字段 ...

随机推荐

  1. PHP 使用reflection时的问题,以及解决方案

    错误:PHP Fatal error: Using $this when not in object context 代码如下: <?php class someClass { private ...

  2. Android测试——adb命令

    Adb (Android Debug Bridge)起到调试桥的作用. 通过adb我们可以在Eclipse中方便通过DDMS来调试Android程序.adb采用监听Socket TCP 5554等端口 ...

  3. linux学习之——学习路线(摘抄)

    摘抄某笔者的Linux练习的道路图(rolistingmap): 对比一下为什么要学习linux 了解Linux的基础常识,这些包括了用户管理.群组的概念.权限的观念等 掌握至多50个以上的常用命令 ...

  4. 剑指offer题目11-20

    面试题11:数值的整数次方 public class Solution { public double Power(double base, int exponent) { if(exponent = ...

  5. C#键盘钩子 鼠标钩子

    最新对C#模拟键盘按键,鼠标操作产生了兴趣.特从网上收集了一些常用的API用来调用键盘,鼠标操作. class Win32API { #region DLL导入 /// <summary> ...

  6. IAP 破解漏洞验证

    IAP支付有个漏洞,用户使用的可能是IAP Free 或者俄罗斯破解什么的,所产生的交易号:170000029449420 product_id:com.zeptolab.ctrbonus.super ...

  7. Frogger

    Freddy Frog is sitting on a stone in the middle of a lake. Suddenly he notices Fiona Frog who is sit ...

  8. MySQL主从复制、半同步复制和主主复制

    同步,异步,半同步复制的比较: 同步复制:Master提交事务,直到事务在所有的Slave都已提交,此时才会返回客户端,事务执行完毕.缺点:完成一个事务可能会有很大的延迟. 异步复制:当Slave准备 ...

  9. 斯坦福第十一课:机器学习系统的设计(Machine Learning System Design)

    11.1  首先要做什么 11.2  误差分析 11.3  类偏斜的误差度量 11.4  查全率和查准率之间的权衡 11.5  机器学习的数据 11.1  首先要做什么 在接下来的视频中,我将谈到机器 ...

  10. c# XML序列化与反序列化 属性字段标识

    序列化对象 public class People { [XmlAttribute("NAME")] public string Name { set; get; } [XmlAt ...