• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
周六还要上班,闲来无事,写了一段调用排序算法的类,利用委拖来实现比较,可扩展性比较强。
排序类如下:
代码
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);
        }

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#livechart使用发布时间:2022-07-10
下一篇:
C#面向对象之封装。发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap