概念:
以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); } }
原文:https://www.cnblogs.com/qjns/p/13222624.html