C#设计模式 排序算法与委托结合运用

周六还要上班,闲来无事,写了一段调用排序算法的类,利用委拖来实现比较,可扩展性比较强。
排序类如下:
代码
using System;
using System.Collections.Generic;
using System.Text;

namespace SortMethod
{
    
//主要用来调用比较两个对象的方法
    public delegate bool Comparison(object a,object b);
    
public class Sort
    {
        
/// <summary>
        
/// 冒泡排序算法
        
/// </summary>
        
/// <param name="s"></param>
        
/// <param name="cp"></param>
        public static void BubbleSort(object[] list, Comparison cp)
        {
            
for (int i = 0; i < list.Length; i++)
            {
                
for (int j = i + 1; j < list.Length; j++)
                {
                    
if (cp(list[i], list[j]))
                    {
                        
object rs = list[i];
                        list[i] 
= list[j];
                        list[j] 
= rs;
                    }
                }
            }
        }
        
/// <summary>
        
/// 选择排序算法
        
/// </summary>
        
/// <param name="s"></param>
        
/// <param name="cp"></param>
        public static void SelectSort(object[] list, Comparison cp)
        {
            
int min;
            
for (int i = 0; i < list.Length; i++)
            {
                min 
= i;
                
for (int j = i + 1; j < list.Length; j++)
                {
                    
if (cp(list[min], list[j]))
                    {
                        min 
= j;
                    }
                }
                
object rs = list[i];
                list[i] 
= list[min];
                list[min] 
= rs;
            }
        }

        
/// <summary>
        
/// 插入排序算法
        
/// </summary>
        
/// <param name="s"></param>
        
/// <param name="cp"></param>
        public static void InsertSort(object[] list, Comparison cp)
        {
            
for (int i = 1; i < list.Length; i++)
            {
                
object t = list[i];
                
int j = i;
                
while ((j > 0&& cp(t, list[j - 1]))
                {
                    list[j] 
= list[j - 1];
                    
--j;
                }
                list[j] 
= t;
            }
        }
        
/// <summary>
        
/// 希尔排序算法
        
/// </summary>
        
/// <param name="s"></param>
        
/// <param name="cp"></param>
        public static void ShellSort(object[] list, Comparison cp)
        {
            
int inc;
            
for (inc = 1; inc <= list.Length / 9; inc = 3 * inc + 1) ;
            
for (; inc > 0; inc /= 3)
            {
                
for (int i = inc + 1; i <= list.Length; i += inc)
                {
                    
object t = list[i - 1];
                    
int j = i;
                    
while ((j > inc) && cp(t,list[j - inc - 1]))
                    {
                        list[j 
- 1= list[j - inc - 1];
                        j 
-= inc;
                    }
                    list[j 
- 1= t;
                }
            }
        }

    }
}
调用类进行排序
代码

protected void Button1_Click(object sender, EventArgs e)
        {
            
//通过委托调用方法
            SortMethod.Comparison com = new SortMethod.Comparison(Comp);           
            
string[] str = TextBox1.Text.Trim().Split(',');
            
//进行排序
            SortMethod.Sort.BubbleSort(str,com);
            
//输出
            Label1.Text = "";
            
for (int i = 0; i < str.Length; i++)
            {
                Label1.Text 
+= str[i].ToString() + ",";
            }
        }
        
//比较方法,这里可以自己定义
        public bool Comp(object a, object b)
        {
            
return Convert.ToInt32(a) < Convert.ToInt32(b);
        }
原文地址:https://www.cnblogs.com/qingyi/p/1632905.html