c#排序算法

c#排序算法总结
/// 
        /// 插入排序 /// 
        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 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 SelectionSorter
        {
            // public enum comp {COMP_LESS,COMP_EQUAL,COMP_GRTR};
            private int min;
            // private int m=0;
            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;
                    // Console.WriteLine("{0}",list[i]);
                }

            }
        }
 
       /// 
        /// 冒泡排序 /// 
        public class bubblesort
        {
            public void BubbleSort(int[] R)
            {
                int i, j, temp; //交换标志 
                bool exchange;
                for (i = 0; i < R.Length; i++) //最多做R.Length-1趟排序 
                {
                    exchange = false; //本趟排序开始前,交换标志应为假
                    for (j = R.Length - 2; j >= i; j--)
                    {
                        if (R[j + 1] < R[j]) //交换条件
                        {
                            temp = R[j + 1];
                            R[j + 1] = R[j];
                            R[j] = temp;
                            exchange = true; //发生了交换,故将交换标志置为真 
                        }
                    }
                    if (!exchange) //本趟排序未发生交换,提前终止算法 
                    {
                        break;
                    }
                }
            }
        }
guxing 2016-04-14