黑马程序员之数据结构学习笔记:快速排序

来源:互联网 发布:软件测试转正心得体会 编辑:程序博客网 时间:2024/04/30 10:27

-------------------------------------2345王牌技术员联盟、2345王牌技术员联盟、期待与您交流!--------------------------------

快速排序思想:

快速排序是一种效率很高的排序算法,合并排序是基于位置的,而快速排序是基于值的,快速排序按照值对数组分区,先选定一个中值,把大于此值的放于一侧,小于的放于另一侧,接下来分别对两侧进行同样的操作,最后得到一个排序好的数组

采用递归算法实现如下:

        /// <summary>
        /// 快速排序的递归算法实现
        /// </summary>
        /// <param name="arr">排序数组</param>
        /// <param name="low">数组的最低位</param>
        /// <param name="high">数组的最高位</param>
        /// 调用:
        ///int[] A = new int[] { 5, 3, 1, 9, 8, 2, 4, 7 };
        ///QuickSort(ref A, 0, A.Length - 1);
       static void QuickSort(ref int[] arr, int low, int high)
        {
            int midKey;
            if (low < high)
            {
                midKey = Partition(ref arr, low, high);
                QuickSort(ref arr, low, midKey - 1);
                QuickSort(ref arr, midKey + 1, high);
            }
        }
        static int Partition(ref int[] arr, int low, int high)
        {
            int midKey = arr[low], keyValue = arr[low];
            while (low < high)
            {
                while (low < high && arr[high] >= midKey)
                {
                    --high;
                }
                arr[low] = arr[high];
                while ( low < high && arr[low] <= midKey)
                {
                    ++low;
                }
                arr[high] = arr[low];
            }
            arr[low] = keyValue;
            return low;
        }


--------------------------------------------------- 2345王牌技术员联盟、2345王牌技术员联盟、期待与您交流!---------------------------------------------------------