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

时间:2022-02-18 07:54:05

今天有个客户需求是有一坐标数组,希望按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. 每天一道算法题&lpar;14&rpar;——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. HTML中实现Table表头点击升序&sol;降序排序

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

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

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

  5. SQL-ORDER BY 多字段排序&lpar;升序、降序&rpar;

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

  6. mysql&lowbar;DML&lowbar;select&lowbar;升序降序去重

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

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

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

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

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

  9. c&plus;&plus;之升序和降序排序

    1.头文件 #include <functional> 2. 降序 // 期末成绩 int score[] = {99, 77, 30, 80}; // 1. 降序排列 std::sort ...

随机推荐

  1. 妈妈再也不担心我的编码问题了。中文编码融汇贯通,windows&comma;django&comma;python&comma;java&comma;html 【转】

    http://blog.csdn.net/farmer_cc/article/details/41830999 HTML编码:html文件是utf-8编码的,不确定的话用记事本打开,另存为的时候就能够 ...

  2. webapp开发中的一些注意的

    和大多数响应式的布局一样,webapp开发也是需要浮动布局和百分比布局,需要考虑的是小屏幕手机250px和大屏幕设备768px,但是习惯以320px和640px来分割,jq中的一句话$(functio ...

  3. &num;&num;DAY4 事件的基本概念、触摸的基本概念、响应者链、手势

    ##DAY4  事件的基本概念.触摸的基本概念.响应者链.手势 #pragma mark ———————事件的基本概念 ——————————— 事件的基本概念: 1)事件是当用户的手指触击屏幕及在屏幕 ...

  4. java 对map排序

    public static Map<String, String> sortMapByKey(Map<String, String> map) { if (map == nul ...

  5. 4月23日 MySQL学习-DDL

    今日学习的是DDL的操作(数据定义语言) create table teachers (id int,name varchar(50));//创建一个表 给了两个类型alter table stude ...

  6. 关于商米D1S,USB默认权限在关机后丢失的FAQ

    1.机器型号:商米D1S 2.机器系统版本:7.1.2 3.情况描述:双屏的机器不管是银盒子收银还是银盒子智能收银,勾选默认后重启机器还是会提示, 4.解决方案:商米厂商大约会在1月份进行系统更新,到 ...

  7. ajax跨域请求数据

    最近开始接触ajax的跨域请求问题,相比网上说的一大堆,我这里就说得比较浅显了. 关于为什么要跨域这个问题,实际的需求是当网站项目部署在一个域名上的时候,分域可以很好地解决网站卡顿问题(拥有多台服务器 ...

  8. cxGrid控件过滤排序和TClientDataSet同步

    https://www.cnblogs.com/false/archive/2013/02/24/2924240.html procedure TReport10Form.cxGridViewData ...

  9. 2&period;1TF模型持久化

    目前tf只能保存模型中的variable变量,整个模型还不能保存,版本1.x 保存模型代码 import tensorflow as tf import numpy as np # Save to f ...

  10. testng入门教程12 TestNG执行多线程测试

    testng入门教程 TestNG执行多线程测试 testng入门教程 TestNG执行多线程测试 并行(多线程)技术在软件术语里被定义为软件.操作系统或者程序可以并行地执行另外一段程序中多个部分或者 ...