• 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);
            }
  • 相关阅读:
    布隆过滤器解决缓存穿透问题
    查询指定距离内的快递柜或者店铺
    各注册中心consul eureka 以及nacos的服务发现原理
    consul注册中心服务注册过程源码分析
    consul注册中心如何自动剔除下线服务
    svn执行reflash/cleanup报错wc.db解决办法
    第二章
    第一章 JVM和Java体系架构
    2、操作系统-中断
    1、操作系统-启动
  • 原文地址:https://www.cnblogs.com/qingyi/p/1632905.html
Copyright © 2020-2023  润新知