C# 排序的多种实现方式(经典)

一、 对数组进行排序

最常见的排序是对一个数组排序,比如:

 int[] aArray = new int[8] { 18, 17, 21, 23, 11, 31, 27, 38 };

 1、利用冒泡排序进行排序:

(即每个值都和它后面的数值比较,每次拿出最小值)


static void Main(string[] args)
        {
            int[] aArray = new int[8] { 18, 17, 21, 23, 11, 31, 27, 38 };
            for (int j = 0; j < aArray.Length - 1; j++)
            {
                for (int i = 0; i < aArray.Length - 1; i++)
                {
                    if (aArray[i] > aArray[i + 1])
                    {
                        int temp = aArray[i];
                        aArray[i] = aArray[i + 1];
                        aArray[i + 1] = temp;
                    }

                }
            }


            foreach (var a in aArray)
            {
                Console.Write($"{a} ");
            }
            Console.ReadKey();
        }

运行结果:

2、利用Array.Sort排序:

1升序
 static void Main(string[] args)
        {
            int[] aArray = new int[8] { 18, 17, 21, 23, 11, 31, 27, 38 };
            Array.Sort(aArray);

            foreach (var a in aArray)
            {
                Console.Write($"{a} ");
            }
            Console.ReadKey();
        }

运行结果:

2降序:

 先升序排列,然后对数组反转

 static void Main(string[] args)
        {
            int[] aArray = new int[8] { 18, 17, 21, 23, 11, 31, 27, 38 };
            Array.Sort(aArray);//数组排序(默认升序)
            Array.Reverse(aArray);//数组反转

            foreach (var a in aArray)
            {
                Console.Write($"{a} ");
            }
            Console.ReadKey();
        }

运行结果:

二、对List进行排序

  大多数时候,我们需要将list集合里面的数据进行排序,

1、利用List<T> 自带的Sort排序方法 

    1 、升序排序

 aList.Sort();
2、降序排序
  aList.Sort();//升序
  aList.Reverse();//反转
3 sort也可以用如下方式操作:

list.Sort((a, b) => a.CompareTo(b));//升序
list.Sort((a, b) => b.CompareTo(a));//降序

2、利用List的OrderBy与OrderByDescending方法

    升序排列:

  List<int> aList = new List<int> { 18, 17, 21, 23, 11, 31, 27, 38 };
  aList = aList.OrderBy(a => a).ToList();
降序排列:
 List<int> aList = new List<int> { 18, 17, 21, 23, 11, 31, 27, 38 };
  aList = aList.OrderByDescending(a => a).ToList();
利用link,这种感觉和方法二是一回事
List<int> aList = new List<int> { 18, 17, 21, 23, 11, 31, 27, 38 };
 aList = (from a in aList orderby a ascending select a).ToList();//升序
 aList = (from a in aList orderby a descending select a).ToList();//降序

如果集合里存放的是一个类型,比如:

学生类:

 public class Student
        {
            public string name { get; set; }
            public int age { get; set; }
            public int score { get; set; }

            public override string ToString()
            {
                return $"姓名是:{name},年龄是:{age},得分是:{score}";
            }
        }

方法一:stuList.Sort((x, y) => x.score.CompareTo(y.score));

static void Main(string[] args)
        {
            List<Student> stuList = new List<Student>
            {
                new Student() {name = "zyr", age = 23, score = 99},
                new Student() {name = "zls", age = 25, score = 95},
                new Student() {name = "zsq", age = 27, score = 100},
                new Student() {name = "zlw", age = 15, score = 69},
                new Student() {name = "ywe", age = 17, score = 72},
                new Student() {name = "asw", age = 29, score = 58}
            };

            //方法1 升序
            //stuList.Sort((x, y) => x.score.CompareTo(y.score));
     
            stuList = stuList.OrderBy(stu=>stu.score).ToList();

            foreach (var stu in stuList)
            {
                Console.WriteLine($"{stu}");
            }
            Console.ReadKey();
        }

方法二: 加入这个学生成绩有重复的,对于重复的成绩按照年龄再排序:
 方法1 升序
            stuList.Sort((x, y) =>
            {
                int ret = x.score.CompareTo(y.score);
                if (ret == 0)
                {
                    return x.age.CompareTo(y.age);
                }
                else
                {
                    return ret;
                }
            });
            方法2 升序
            stuList = stuList.OrderBy(stu => stu.score).ThenBy(stu => stu.age).ToList();

相关推荐

  1. 希尔排序:提高排序效率经典方法

    2024-04-08 23:50:02       33 阅读
  2. 前端实现水印效果多种方案

    2024-04-08 23:50:02       13 阅读
  3. 【Kotlin】中英数字混合等多种情况下排序方式

    2024-04-08 23:50:02       41 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-08 23:50:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-08 23:50:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-08 23:50:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-08 23:50:02       20 阅读

热门阅读

  1. SPMI 协议简介

    2024-04-08 23:50:02       14 阅读
  2. C++递推算法

    2024-04-08 23:50:02       15 阅读
  3. 网络通信的隐形护卫

    2024-04-08 23:50:02       14 阅读
  4. 10.左右相同(省模拟赛)

    2024-04-08 23:50:02       14 阅读
  5. python 函数

    2024-04-08 23:50:02       13 阅读
  6. [RK-Linux] RK3399启动流程详解

    2024-04-08 23:50:02       16 阅读
  7. 数据库的介绍、分类、作用和特点

    2024-04-08 23:50:02       15 阅读
  8. 【Go高阶】细说 Channel 的进阶用法

    2024-04-08 23:50:02       15 阅读
  9. Docker Desktop安装

    2024-04-08 23:50:02       16 阅读
  10. react native 相机拍照

    2024-04-08 23:50:02       14 阅读
  11. 贪婪算法python实现

    2024-04-08 23:50:02       18 阅读
  12. nuxt3使用记录二:页面构建的细节(特别是SSG)

    2024-04-08 23:50:02       15 阅读
  13. es6新增加的语法

    2024-04-08 23:50:02       14 阅读