1. 程式人生 > >c# 排序之快速排序

c# 排序之快速排序

程式碼:

/// <summary>
        /// 排序
        /// </summary>
        /// <param name="array">要排序的陣列</param>
        /// <param name="low">下標開始位置,向右查詢</param>
        /// <param name="high">下標開始位置,向左查詢</param>
        public static void Sort(int[] array, int low, int high)
        {
            if (low >= high)
                return;
            //完成一次單元排序
            int index = SortUnit(array, low, high);
            //遞迴呼叫,對左邊部分的陣列進行單元排序
            Sort(array, low, index - 1);
            //遞迴呼叫,對右邊部分的陣列進行單元排序
            Sort(array, index + 1, high);
        }

        /// <summary>
        /// 單元排序
        /// </summary>
        /// <param name="array">要排序的陣列</param>
        /// <param name="low">下標開始位置,向右查詢</param>
        /// <param name="high">下標開始位置,向右查詢</param>
        /// <returns>每次單元排序的停止下標</returns>
        public static int SortUnit(int[] array, int low, int high)
        {
            int key = array[low];//基準數
            while (low < high)
            {
                //從high往前找小於或等於key的值
                while (low < high && array[high] > key)
                    high--;
                //比key小開等的放左邊
                array[low] = array[high];
                //從low往後找大於key的值
                while (low < high && array[low] <= key)
                    low++;
                //比key大的放右邊
                array[high] = array[low];
            }
            //結束迴圈時,此時low等於high,左邊都小於或等於key,右邊都大於key。將key放在遊標當前位置。 
            array[low] = key;
            return high;
        }