首页 > 编程语言 > 详细

C#冒泡排序拓展(泛型+委托)

时间:2020-07-02 10:24:38      阅读:68      评论:0      收藏:0      [点我收藏+]

基本冒泡排序

概念:

int为例,每次从头开始扫描两个相邻元素的大小,根据所需的顺序进行调换,直到不需要交换位置。表示元素已经排序完毕。

实现逻辑

依然以int为例,设置一个swapped为标志表示每次循环时是否有进行元素互换,初始值为True。然后进入循环体,从头开始扫描,循环内若有发生交换操作则将swapped置为true。一轮排序后重新将swapped置为false,开始新一轮循环。直到某一轮循环内不再发生交换,则表示已经没有元素需要排序,排序完成。

泛型实现冒泡排序

概念:

基于基本冒泡排序,有时候我们定义了一个自定义类中有两个或以上成员,需要根据其中一项来对对象进行排序,即可使用此排序方法。

实现逻辑:

public static void Sort<T>(List<T> sortArray,Func<T,T,bool> comparision)

传入需要排序的自定义类数组,然后调用自定义的方法comparision比较两个元素的大小进行排序。

注意点:

List<>System.Collections.Generic;

Func指向方法的返回值和所需参数

代码实现:

以自定义类Employee为例

先定义一个Employee

class Employee

    {

        //定义成员变量

        private string Name { get; set; }

        private int Number { get; set; }

 

        //构造函数

        public Employee(string name, int number)

        {

            this.Name = name;

            this.Number = number;

        }

 

        //专有的比较方法

        public static bool Compare(Employee employee1,Employee employee2)

        {

            if (employee1.Number > employee2.Number)

                return true;

            else

                return false;

        }

 

        //输出数据

        public void Print()

        {

            Console.WriteLine("Name:"+Name+" Number:"+Number);

        }

    }

class Program

    {

        //实例一个Employee对象

        static Employee[] employee = new Employee[]

        {

        new Employee("l",41),

        new Employee("2",53),

        new Employee("3",26),

        new Employee("4",17),

        };

 

        static void Main(string[] args)

        {

            //进行排序

            Sort<Employee>(employee, Employee.Compare);//Func的指向

            //遍历输出数据

            foreach (var e in employee)

            {

                e.Print();

            }

        }

 

        //排序方法

        public static void Sort<T>(T[] sortArray, Func<T,T, bool> comparision)

        {

            bool swapped = true;

            do

            {

                swapped = false;

                for (int i = 0; i < sortArray.Length - 1; i++)

                {

                    if (comparision(sortArray[i], sortArray[i + 1]))

                    {

                        T temp = sortArray[i];

                        sortArray[i] = sortArray[i + 1];

                        sortArray[i + 1] = temp;

                        swapped = true;

                    }

                }

            } while (swapped);

        }

}

C#冒泡排序拓展(泛型+委托)

原文:https://www.cnblogs.com/qjns/p/13222624.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!