快排在大规模元素(》100)被证明几乎是效率最高的排序方法, 也是一种分而治之算法的一个典型应用。

快排的思想是:

1)每次选定一个元素作为pivot, 利用pivot对数组进行分区(partition)

2) 大的放在pivot的后面,小的放在pivot前面

3)递归的对新生成的两个分区进行快排

 

代码如下:

    public class QuickSortClass
    {
        public static void QuickSort(int[] array, int left, int right)
        {
            if (left < right)
            {
                int newPartition = Partition(array, left, right);
                QuickSort(array, left, newPartition - 1);
                QuickSort(array, newPartition + 1, right);
            }
        }

        public static int Partition(int[] array, int left, int right)
        {
            Console.WriteLine("partition, left={0}, right={1}", left, right);
            int pivot = array[right];
            int j = left - 1, i = left;
            while (i < array.Length && j < array.Length)
            {
                if (array[i] > pivot)
                {
                    i++;
                }
                else
                {
                    j++;
                    Swap(ref array[i], ref array[j]);
                    i++;
                }
            }

            return j;
        }

        private static void Swap(ref int a, ref int b)
        {
            int t = a;
            a = b;
            b = t;
        }

        public static void PrintArray(int[] array)
        {
            for (int i = 0; i < array.Length; i++)
            {
                Console.WriteLine(array[i]);
            }
        }
    }

 

posted on 2018-01-27 14:39  xuyanran  阅读(114)  评论(0编辑  收藏  举报