C#排序算法的实现---快速排序

  快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

二、算法分析

  快速排序每次将待排序数组分为两个部分,在理想状况下,每一次都将待排序数组划分成等长两个部分,则需要logn次划分。而在最坏情况下,即数组已经有序或大致有序的情况下,每次划分只能减少一个元素,快速排序将不幸退化为冒泡排序,所以快速排序时间复杂度下界为O(nlogn),最坏情况为O(n^2)。在实际应用中,快速排序的平均时间复杂度为O(nlogn)。

  快速排序是不稳定的排序算法。

三、算法实现

public class QuickSort
    {
        //一趟排序
        private int SortUnit(int[] list, int i, int j)
        {
            int k=list[i];
            while (i != j)
            {
                while (j > i)
                {
                    if (list[j] < k)
                    {
                        list[i] = list[j];
                        break;
                    }
                    j--;
                }
                while (i < j)
                {
                    if (list[i] > k)
                    {
                        list[j] = list[i];
                        break;
                    }
                    i++;
                }
            }
            list[i] = k;
       return i;
        }

        //递归
        private void QuickSortArray(int[] list, int l, int r)
        {
            //当左下标和右下标碰头排序结束
            if (l >= r)
                return;
            int index = SortUnit(list, l, r);
            QuickSortArray(list, l, index);
            QuickSortArray(list, index + 1, r);
        }

        //快速排序
        public void Sort(int[] list)
        {
            QuickSortArray(list, 0, list.Length - 1);
        }
    }
原文地址:https://www.cnblogs.com/DCLi/p/QuickSort.html