數據結構和算法基礎之快速排序

/// <summary>
        /// 快速排序
        /// 是對冒泡排序的一種改進,基本思想是選取一個記錄做爲樞軸,通過一趟排序,將整段序列分爲兩個部分,
        /// 其中一部分的值都小於樞軸,另外一部分都大於樞軸。而後繼續對這兩部分繼續進行排序,從而使整個序列達到有序。
        /// </summary>
        public static void QuiteSort(int[] arry,int begin,int end)
        {
            if (begin >= end) return;
            int pivotIndex = QuickSort_Once(arry, begin, end);
            QuiteSort(arry, begin, pivotIndex - 1);
            QuiteSort(arry, pivotIndex + 1, end);
        }

        private static int QuickSort_Once(int[] arry, int begin, int end)
        {
            int pivot = arry[begin];
            int i = begin;
            int j = end;
            while(i<j)
            {
                //右到左尋找第一個小於基準pivot的元素
                while(arry[j]>=pivot&&i<j)
                {
                    j--;
                }
                arry[i] = arry[j];
                //左到右尋找第一個大於基準pivot的元素
                while (arry[i]<=pivot&&i<j)
                {
                    i++;
                }
                arry[j] = arry[i];
            }
            //退出循環i=j
            arry[i] = pivot;
            return i;
        }
           

        private static void Swap(int[] arry, int i,int j)
        {
            int tmp = arry[i];
            arry[i] = arry[j];
            arry[j] = tmp;
        }

 

時間複雜度:nlognui

相關文章
相關標籤/搜索