快速排序,捣鼓了一天 = =!太菜了。。。

Posted on 2011-08-01 17:09  flydreamer  阅读(456)  评论(1)    收藏  举报

public class QuickSort
        {
            /// <summary>
            /// 排序
            /// </summary>
            /// <param name="numbers">待排序数组</param>
            /// <param name="left">数组第一个元素索引Index</param>
            /// <param name="right">数组最后一个元素索引Index</param>
            private static void Sort(int[] numbers, int left, int right)
            {

                //左边索引小于右边,则还未排序完成
                if (left < right)
                {
                    //取第一个元素作为比较基准,小于他的往左边移,大于他的往右边移
                    int middle = numbers[left];
                    int i = left ;
                    int j = right;
                    while (true)
                    {
                        while (numbers[j] > middle && j > 0)
                        {

                         
                            j--;
                        }
                        Swap(numbers, i, j);
                        while (numbers[i] < middle && i < right)

                        {
                           
                            i++;
                        }
                        Swap(numbers, i, j);
                        if (i >= j)
                            break;

                    }
                    Sort(numbers, left, i - 1);
                    Sort(numbers, j + 1, right);
                }

             
            }
            /// <summary>
            /// 交换元素值
            /// </summary>
            /// <param name="numbers">数组</param>
            /// <param name="i">当前左边索引</param>
            /// <param name="j">当前右边索引</param>
            private static void Swap(int[] numbers, int i, int j)
            {
                int number = numbers[i];
                numbers[i] = numbers[j];
                numbers[j] = number;
            }
            public static void Main()
            {
                int[] max = { 6, 5, 2, 9, 7, 4, 0 };
                //{0,5,2,9,7,4,6}i=0,j=6
                //{0,5,2,6,7,4,9}i=3,j=6
                //{0,5,2,4,7,6,9}i=3,j=5
                //{0,5,2,4,6,7,9}i=4,j=5
                //
                Sort(max, 0, max.Length-1 );
                StringBuilder temp = new StringBuilder();
                for (int i = 0; i < max.Length; i++)
                {
                    temp.Append(max[i].ToString() + ",");
                }
                Console.WriteLine(temp.ToString().Substring(0, temp.Length - 1));//Substring 起到消除最后一个逗号的作用
                Console.ReadLine();
            }
        }
   

博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3