一,冒泡排序法理解:就是将一个集合里的数据当前位置和后一位比较,然当前位置大于后一位,则两个位置替换,直到排序完成
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace MaoPao { class Program { static void Sort(int[] sArray) { bool sw = true; do { sw = false; for (int i = 0; i < sArray.Length - 1; i++) { if (sArray[i] > sArray[i + 1]) { int temp = sArray[i]; sArray[i] = sArray[i + 1]; sArray[i + 1] = temp; sw = true; } } } while (sw); } static void Main(string[] args) { int[] sArray = new int[] { 88, 73, 22, 1, 445, 53, 63, 5 }; Sort(sArray); foreach (var temp in sArray) { Console.Write(temp + " "); } Console.ReadKey(); } } }
二,冒泡排序拓展
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace MaoPao { class Program { static void CommonSort<T>(T[] sArray, Func<T, T, bool> compareMethod) { bool sw = true; do { sw = false; for (int i = 0; i < sArray.Length - 1; i++) { if (compareMethod(sArray[i], sArray[i + 1])) { T temp = sArray[i]; sArray[i] = sArray[i + 1]; sArray[i + 1] = temp; sw = true; } } } while (sw); } static void Main(string[] args) { Employee[] employees = new Employee[] { new Employee("张三",12), new Employee("李四",234), new Employee("陈五",14), new Employee("李六",234), new Employee("王七",90) }; CommonSort<Employee>(employees, Employee.Compare); foreach (Employee em in employees) { Console.WriteLine(em); } Console.ReadKey(); } } }
类
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace MaoPao { class Employee { public string Name { get; private set; } public int Comp { get; private set; } public Employee(string name, int comp) { this.Name = name; this.Comp = comp; } //如果e1大于e2的话,返回true,否则返回false public static bool Compare(Employee e1, Employee e2) { if (e1.Comp > e2.Comp) return true; return false; } public override string ToString() { return Name + ":" + Comp; } } }
三,泛型的冒泡排序
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace Maopao { class Program { static void Main(string[] args) { People[] pl = new People[]{ new People(3, "小明3"), new People(1, "小明1"), new People(2, "小明2"), new People(5, "小明5"), new People(4, "小明4"), new People(9, "小明9") }; Sort s = new Sort(); int[] t = { 4, 2, 3, 9, 5, 1, 8 }; int[] t1 = s.CompareTo(t); People[] t3 = s.CompareSort<People>(pl); for (int i = 0; i < t1.Length; i++) { Console.WriteLine(t1[i].ToString()); } //用泛型实现冒泡程序 for (int i = 0; i < t3.Length; i++) { Console.WriteLine(t3[i].Name); } Console.ReadKey(); } } public class Sort { public int[] CompareTo(int[] a) { int temp; for (int i = 0; i < a.Length - 1; i++) { for (int j = i + 1; j < a.Length; j++) { if (a[i] > a[j]) { temp = a[i]; a[i] = a[j]; a[j] = temp; } } } return a; } public T[] CompareSort<T>(T[] t) where T : IComparable { T temp; for (int i = 0; i < t.Length - 1; i++) { for (int j = i + 1; j < t.Length; j++) { if (t[i].CompareTo(t[j]) > 0) { temp = t[i]; t[i] = t[j]; t[j] = temp; } } } return t; } } public class People : IComparable { public People(int id, string name) { this.Id = id; this.Name = name; } public int Id { set; get; } public string Name { get; set; } public int CompareTo(object obj) { People p = (People)obj; return this.Id.CompareTo(p.Id); } } }