美文网首页
快速排序法

快速排序法

作者: 一纸砚白 | 来源:发表于2018-02-13 15:50 被阅读23次

快速排序法就是用一个数作为基数,一次遍历,把小于基数的数放在基数的左面,把大于基数的数放在基数的右边,一次遍历之后第一个选中的基数放在了正确的位置。之后分别递归左边和右边的子数组。直到子数组的长度变成1,就是把每个数都放在了正确的位置。

例如排序  3 1 4 6 7 2 5 

将3作为基数,把3拿起,一次遍历之后,找到正确的位置,再放置3。(左游标在X,右游标在5)

                      X 1 4 6 7 2 5 

从右面开始找比3小的数,5>3,右游标左移,找到了2,把2放在X的位置,这时2的位置为空。(左游标在1,右游标在2)

                      2 1 4 6 7 X 5

从左面开始找比3大的数放在X的位置,找到了4。把4放在X,4原来的位置变为X(左游标在X,右游标在7)

                      2 1 X 6 7 4 5                

从右面找小于3的数,7>3,右游标左移,6>3,右游标左移。此时左右游标相等,都在X,把基数3放在X。一次遍历结束。

第一次排序后: 2  1     3      6  7 4  5

3的位置是正确的,左边数组2 1 ,右边数组6 7 4 5  继续重复上述方法。

左边排序   第一次基数为2     1  2   结束

右边排序   第一次基数为6     5  4  6  7        6在正确的位置

                   5 4 排序  4 5     7长度为1不用排序

                                   4 5 6 7      结束

递归结束  返回  1  2  3  4  5  6  7  

代码:

public int[] quickSort(int[] a, int l, int r) {

        if (l < r) {

            int i = l, j = r, v = a[l];//i:左边开始活动坐标,j:右边开始活动坐标,v:基数

            while (i < j) {//只要左边游标和游标不重叠的话那么就继续遍历               

          //每一轮遍历的时候只进行一轮,把右边的一个比基数小的数移动到左边,把左边比基数大的数移动到右边  

              while (i < j && a[j] > v)     // 找出右边比左边小的坐标 

                   j--;

            if (i < j)

               a[i++] = a[j];//进行移动,左边坐标移动一个数 

            while (i < j && a[i] < v)    // 找出左边比右边大的左边 

                   i++;

                if (i < j)

                    a[j--] = a[i];//进行移动,右边坐标移动一个数            }

            a[i] = v;//当游标重叠时填入基数 

             this.quickSort(a, l, i - 1);   // 左边递归

            this.quickSort(a, i + 1, r);  //右边递归

            return a; 

        }

        return a;

    }

各种排序的复杂度

相关文章

  • 排序算法总结

    选择排序法 插入排序法 冒泡排序法 归并排序法 自顶向下 自底向上 快速排序法 单路快速排序法 双路快速排序法 三...

  • iOS常见算法

    升序算法:用冒泡排序法 选择排序法 快速排序

  • 排序算法篇_快速排序法

      快速排序(Quick Sort)法和冒泡排序法类似,都是基于交换排序思想的。快速排序对冒泡排序法进行了改进,从...

  • 《python算法教程》Day9 - 快速排序法

    这是《python算法教程》第9篇读书笔记,笔记的主要内容为快速排序法。 快速排序法简介 快速排序法运用分治法的方...

  • 排序算法

    排序算法分类 排序算法常用主要有:冒泡排序法、快速排序法、选择排序法、插入排序法、堆排序法、归并排序法等几种。 ...

  • php实现几种常见的排序方法

    1. 冒泡排序法: 2. 选择排序法: 3.插入排序法: 4.快速排序法:

  • 3种排序

    冒泡排序 插入排序 快速排序法

  • js 常见排序算法(快速排序,选择排序等)

    快速排序法 选择排序 插入排序 冒泡排序

  • 常用的排序算法

    1. 冒泡排序: 2.快速排序法 3.插入排序法 4.选择排序法 5.归并排序法

  • 数组相关处理函数2

    冒泡排序法 快速排序法 数组排序函数 ksort 对数组按照键名排序 krsort 键名降序排序 asort 对数...

网友评论

      本文标题:快速排序法

      本文链接:https://www.haomeiwen.com/subject/gwvjtftx.html