快速排序(c#)

快速排序法


操作

1.用Partition()函数取得划分数,严的教材该数选的是数组第一个数。

2.将小于划分树的左侧放小于它的数,在右边放比它大的数。此时划分数的位置不需移动,就为它的排序完成后的位置。

3.将划分数的左侧数组和右侧数组分别迭代,直到左右数组为空或者为1。


代码

划分算法

//划分区域返回划分点的最终位置
        public int Partition(int[] s,int low, int high)
        {
            //选数组的第一个点为划分点
            int pos=s[low];
            while(low<high)
            {
                //划分大于划分点区域
                while(s[high]>=pos&&low<high) --high;
                s[low]=s[high];
                //此时high可被覆盖,因为已被赋值到low中
                while(s[low]<=pos&&low<high) ++low;
                s[high]=s[low];
            }
            s[low]=pos;
            return low;
        }

返回值:low(为最终划分数的位置)

迭代排序

//递归方式
        public void RecursiveQSott(int[] s,int low,int high)
        {
            if(low<high)
            {
                int pivotpos=Partition(s,low,high);
                //对小于部分区域排序
                RecursiveQSott(s,low,pivotpos-1);
                 //对大于部分区域排序
                RecursiveQSott(s,pivotpos+1,high);
            }
        }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 快速排序步骤: 首先,对于一个无序数组,开始时选取一个数(通常是首位)作为我们判断的依据。 从尾端往前遍历,找出一...
    曲谐_阅读 1,293评论 0 0
  • 总所周知 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用。 基本原理是数组a...
    梁同桌阅读 416评论 0 0
  • 啥是快排 快排就是选定一个基准元素pirot,经过一趟排序后,使得pirot前面的元素都比它小,pirot后面的元...
    元气满满321阅读 4,461评论 3 7
  • 搞懂基本排序算法 上篇文章写了关于 Java 内部类的基本知识,感兴趣的朋友可以去看一下:搞懂 JAVA 内部类;...
    醒着的码者阅读 1,242评论 3 4
  • 几年前,一位长者兼同事,开玩笑说:***,你当时看上***,是不是贪恋他的颜值?我回答:至少占50%。他这么问,有...
    水月兰阅读 736评论 1 8