zoukankan      html  css  js  c++  java
  • [练手6]快速排序

    目      标      用C#实现快速排序

    思      想     此排序为不稳定排序法

                     在R[low..high]中任选一个记录作为基准(Pivot),以此基准将当前无序区划分为左、右两个较小的子区间R[low..pivotpos- 1)和R[pivotpos+1..high],并使左边子区间中所有记录的关键字均小于等于基准记录(不妨记为pivot)的关键字 pivot.key,右边的子区间中所有记录的关键字均大于等于pivot.key,而基准记录pivot则位于正确的位置(pivotpos)上,它无须参加后续的排序。

    实现
           

     public void Sort(int[] intArray)
            {
                int low = 0;
                int high = intArray.Length - 1;
                Sort(intArray, low, high);
            }

            private void Sort(int[] intArray, int low, int high)
            {
                int intPivot;
                if (low < high)
                {
                    intPivot = SortOnce(intArray, low, high);
                    Sort(intArray, low, intPivot - 1);
                    Sort(intArray, intPivot + 1, high);
                }
            }

            private int SortOnce(int[] intArray, int low, int high)
            {
                int intPivot = intArray[low];

                while (low < high)
                {
                    while (high > low && intArray[high] >= intPivot)
                    {
                        --high;
                    }
                    //比中心轴记录小的移到左边
                    swap(ref intArray, low, high);
                    while (high > low && intArray[low] <= intPivot)
                    {
                        ++low;
                    }
                    //比中心轴记录小的移到右边
                    swap(ref intArray, low, high);
                }
                intArray[low] = intPivot;

                return low;//返回中心轴记录位置
            }

            private void swap(ref int[] intArray, int low, int high)
            {
                int intTemp = intArray[low];
                intArray[low] = intArray[high];
                intArray[high] = intArray[low];
            }

    代码下载  快速排序代码

  • 相关阅读:
    Android ListView 列表视图
    android handler msg的使用 实现进度条
    Intent 传递数据
    微服务-springcloud
    微服务-dubbo学习
    日志收集系统
    微服务追踪
    链表有环判断,快慢指针两种方法/合并链表/删除重复元素/二分递归和while
    算法练习,链表二分最大n个
    池以及barrier简单
  • 原文地址:https://www.cnblogs.com/eugenewu0808/p/DO6.html
Copyright © 2011-2022 走看看