呵呵!在C#里面你完全不需要管具体的排序算法,你只要将所有的元素放到ArrayList里面,然后Sort就行了!ArrayList arr = new ArrayList();
arr.Add(10);
arr.Add(5);
arr.Add(0); // 或者使用arr.AddRange(xxx); xxx为一个一维数组
arr.Sort();这样就好了。(待续)

解决方案 »

  1.   

    http://www.vchome.net/dotnet/dotnetdocs/dotnet2.htm
      

  2.   

    C#排序算法大全(转载)  冒泡排序  本人用了C#开发出冒泡排序算法。希望能为C#语言的学习者带来一些益处。不要忘了,学语言要花大力气学数据结构和算法。using System; namespace BubbleSorter
    {
    public class BubbleSorter
    {
    public void Sort(int [] list)
    {
    int i,j,temp;
    bool done=false;
    j=1;
    while((j<list.Length)&&(!done))
    {
    done=true;
    for(i=0;i<list.Length-j;i++)
    {
    if(list[i]>list[i+1])
    {
    done=false;
    temp=list[i];
    list[i]=list[i+1];
    list[i+1]=temp;
    }
    }
    j++;
    }
    }
    }
    public class MainClass

    public static void Main()
    {
    int[] iArrary=new int[]{1,5,13,6,10,55,99,2,87,12,34,75,33,47};
    BubbleSorter sh=new BubbleSorter();
    sh.Sort(iArrary);
    for(int m=0;m<iArrary.Length;m++)
    Console.Write("{0} ",iArrary[m]); 
    Console.WriteLine();
    }
    }
    }
       选择排序 
      本人用了C#开发出选择排序算法。希望能为C#语言的学习者带来一些益处。不要忘了,学语言要花大力气学数据结构和算法。
    using System;
    namespace SelectionSorter
    {
    public class SelectionSorter

    private int min;
    public void Sort(int [] list)
    {
    for(int i=0;i<list.Length-1;i++)
    {
    min=i;
    for(int j=i+1;j<list.Length;j++)
    {
    if(list[j]<list[min])
    min=j;
    }
    int t=list[min];
    list[min]=list[i];
    list[i]=t;
    }
    }
    }
    public class MainClass

    public static void Main()
    {
    int[] iArrary=new int[]{1,5,3,6,10,55,9,2,87,12,34,75,33,47};
    SelectionSorter ss=new SelectionSorter();
    ss.Sort(iArrary);
    for(int m=0;m<iArrary.Length;m++)
    Console.Write("{0} ",iArrary[m]); 
    Console.WriteLine();
    }
    }
    }
       插入排序   插入排序算法。对想提高C#语言编程能力的朋友,我们可以互相探讨一下。如:下面的程序,并没有实现多态,来,帮它实现一下。
    using System;
    namespace InsertionSorter
    {
    public class InsertionSorter
    {
    public void Sort(int [] list)
    {
    for(int i=1;i<list.Length;i++)
    {
    int t=list[i];
    int j=i;
    while((j>0)&&(list[j-1]>t))
    {
    list[j]=list[j-1];
    --j;
    }
    list[j]=t;
    }
    }
    }
    public class MainClass

    public static void Main()
    {
    int[] iArrary=new int[]{1,13,3,6,10,55,98,2,87,12,34,75,33,47};
    InsertionSorter ii=new InsertionSorter();
    ii.Sort(iArrary);
    for(int m=0;m<iArrary.Length;m++)
    Console.Write("{0}",iArrary[m]); 
    Console.WriteLine();
    }
    }
    }
       希尔排序   希尔排序是将组分段,进行插入排序. 对想提高C#语言编程能力的朋友,我们可以互相探讨一下。如:下面的程序,并没有实现多态,来,帮它实现一下。
    using System; 
    namespace ShellSorter
    {
    public class ShellSorter
    {
    public void Sort(int [] list)
    {
    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)
    {
    int t=list[i-1];
    int j=i;
    while((j>inc)&&(list[j-inc-1]>t))
    {
    list[j-1]=list[j-inc-1];
    j-=inc;
    }
    list[j-1]=t;
    }
    }
    }
    }
    public class MainClass

    public static void Main()
    {
    int[] iArrary=new int[]{1,5,13,6,10,55,99,2,87,12,34,75,33,47};
    ShellSorter sh=new ShellSorter();
    sh.Sort(iArrary);
    for(int m=0;m<iArrary.Length;m++)
    Console.Write("{0} ",iArrary[m]); 
    Console.WriteLine();
    }
    }

     
      

  3.   

    实际上任何元素,只要能够互相比较就能够进行排序了。比如你往里面添加一堆字符串,然后Sort,这样也能够排序,只是排序的规则和字符串的“大小比较”规则一致。如果你需要对一堆的结构或者类进行排序,你只要实现IComparable这个接口就可以了。这个接口表示这个结构或者类的实例能够跟另外一个什么东西比较出大小来。eg:
    class myRecord : IComparable
    {
        public int Num;
        public string Description;    public int CompareTo(object obj)
        {
            myRecord rec;
            rec = obj as myRecord;
            // 如果这个有待比较的东西是一个myRecord类
            if (rec != null)
            {
                return Num.CompareTo(rec.Num); // 大小取决于双方的Num
            }
            else
            {
                return -1; // 否则总比这个东西小。
            }
        }
    }这样myRecord加入到ArrayList之后,就能够按照Num的大小进行排序了。需要注意的是,ArrayList.Sort排序后是一个升序结果,如果你需要降序的结果,只要把return的值取负值就行了,eg: return -Num.CompareTo(rec.Num);另外关于那个return -1需要做一些说明:
    1、CompareTo的返回值有如下含义:
       >0  表示this > obj
       ==0 表示this == obj
       <0  表示this < obj2、CompareTo的参数obj不假定就是和this属于同一个类型,因此必须自己进行判断。这里的else子句就是为了处理类型不一样的情况。3、当类型不一样的时候,也可以考虑throw Exception,但是这样也许会引起不必要的程序异常终止,所以我个人一般采用return -1; 的操作。那么return -1是什么意思呢?由于Sort总是升序的,而一般情况下我们总是比较容易注意到前面的东西,前面的东西一定是CompareTo小的,因此需要把myRecord的项目尽可能提到前面。为此,只要obj不是myRec,就返回-1。4、尽管从理论上来说,arr.Sort允许不同类型的数据之间进行排序,但是这样做是不推荐的。因为你很难保重Sort到底调用了myRecord对象的CompareTo还是obj对象的CompareTo。如果obj对象也总是希望自己处于最前面,就可能引起混乱。或者obj总是在类型不一致的时候抛出异常,那么程序还是会异常终止。因此,尽量不要在需要Sort的ArrayList混装不同类型的元素。5、使用Sort的时候需要确保两条:
      A、这个ArrayList不能够没有任何元素,否则会引发异常(虽然这是一个MS的Bug,但是你不做Count == 0的检查,别人就会以为这是你的Bug)。
      B、这个ArrayList里面的每一个元素都实现了IComparable接口,或者你为Sort提供了实现IComparer接口的对象,否则也会引发异常。所有系统预定义的类型都实现了IComparable接口,不需要担心。至于IComparer,我建议不要管它,除非你希望一会儿按照Num来排序,另一会儿按照Description来排序,再一会儿按照别的什么东西来排序。所以这里先不介绍了,如果你有这个需求,告诉我。6、不用怀疑性能方面的问题,一般情况下足够快了。如果你发现性能方面的问题,先找找别的原因。至少,你应该想我这样写成class myRecord,而不是structure myRecord。
      

  4.   

    给你一个复杂的例子或许会给你提供一些更有意的思考.
    using System;
    namespace ExampleModel
    {
    public class BubbleSorter //冒泡排序
    {
    static public void Sort(object[] sortArray,CompareOp rhsLhsGreater)
    {
    for(int i=0;i<sortArray.Length;i++)
    {
    for(int j=0;j<i;j++)
    {
    if(rhsLhsGreater(sortArray[i],sortArray[j]))
    {
    object temp = sortArray[i];
    sortArray[i] = sortArray[j];
    sortArray[j] = temp;
    }
    }
    }
    }

    }
    public class Employee
    {
    private string name;
    private decimal salary;

    public Employee(string name,decimal salary)          {
    this.name = name;
    this.salary = salary;
    //在此添加构造函数代码
    }
    public override string ToString()
    {
    return string.Format(name + ",{0}",salary);
    }
    public static bool RhsLhsGreater(object lhs,object rhs)
    {
    Employee Lhs = (Employee)lhs; //类型转换
    Employee Rhs = (Employee)rhs;
    return (Rhs.salary > Lhs.salary)?true:false;
    }
    //在此添加类代码
    }

    public delegate bool CompareOp(object lhs,object rhs); //委托

    public class MainEntryPoint
    {
    public static void Main(string[] args)
    {
    Employee[] employees =
    {
    new Employee("Karli Watson",20000),
    new Employee("Bill Gates",10000),
    new Employee("Peng Song",25000),
    new Employee("Mortimer",(decimal)1000000.38),
    new Employee("Arabel Jones",23000),
    new Employee("Avon from 'Blak's'",50000)
    };
    CompareOp EmployeeCompareOp = new CompareOp(Employee.RhsLhsGreater);
    BubbleSorter.Sort(employees,EmployeeCompareOp);
    for(int i=0;i<employees.Length;i++)
    Console.WriteLine(employees[i].ToString());
    //在此添加主程序
    }

    }
    给程序可以对自定义的类进行排序!
      

  5.   

    其实在C#里面已经有比较高深的算法了,如System.Array的Indexof检索/System.Array的Sory来排序,比其它算法都快!大家可以看看