今天有个客户需求是有一坐标数组,希望按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. 在ASP.NET中引用自定义提示框

    在html网页中自定义提示框 正文: 在一般的B/S架构中项目,与用户的交互信息是非常重要的.在一般的情况下,设计人员都在把用户信息呈现在html中,用div和span去弹出相关信息.对于一般的情况而 ...

  2. PHP 输出缓冲控制(Output Control) 学习

    php 缓冲简介 其实我对php ob 系列印象还是很模糊,具体怎么玩的,还不是很了解,平时curd,确实对这些内容没有深入.作为phper 甚是惭愧.网上搜了一通,互相copy,代码运行不能出现作者 ...

  3. opps kio

    Unable to handle kernel NULL pointer dereference at virtual address 00000008pgd = c7090000, hw pgd = ...

  4. iOS 线程锁同步机制

    转载自 http://yulingtianxia.com/blog/2015/11/01/More-than-you-want-to-know-about-synchronized/ 如果你已经使用 ...

  5. Servlet深层知识

    一.ServletContext实现请求转发1.得到请求分发器:RequestDispatcherServletContext.getRequestDispatcher(String path):pa ...

  6. LXC docker

    docker的原理和特点可以参照百度百科 http://baike.baidu.com/view/11854949.htm 昨天听到光照说docker技术实现, 既然可以轻量虚拟,是否可以多个虚拟出分 ...

  7. centos6.5中 nginx-1.6.3 编译安装

    参考来源:http://nginx.org/en/docs/configure.html nginx-1.6.3 编译安装:1) ./configure --help 查看编译选项 2) 需要安装一下 ...

  8. 利用SET STATISTICS IO和SET STATISTICS TIME 优化SQL Server查询性能

    首先需要说明的是这篇文章的内容并不是如何调节SQL Server查询性能的(有关这方面的内容能写一本书),而是如何在SQL Server查询性能的调节中利用SET STATISTICS IO和SET ...

  9. 不可变String

    1,什么是不可变String? String对象是不可变的.当试图修改String值的时候,实际上都是创建一个全新的String对象,该对象包含修改后字符串的值,而最初的对象则没有发生改变. pack ...

  10. [PHP-Socket] Socket Programming in PHP

    Simple Client-Server socket program in PHP Introduction Sockets are used for interprocess communicat ...