声明:本文章参考郝斌老师的数据结构自学视频
今天花了一上午的时间终于明白快速排序的原理了,这里和大家分享一下。
比如有一串数字:5 26 8 4 3 7,我们通过快速排序先找出第一个数字 5 在这一串数字中的位置,然后再对数字 5 两边的数字进行同样的排序方法,最终将整串数字排序完毕。
找到第一个数字 5 的具体步骤如下:
从这串数字的两头出发,把第一个数字的位置取名为 L (low),最后一个数字的位置为 H (high)。在找第一个数字的位置的过程中不断相向移动 L 和 H 的位置,知道 L和 H的位置重叠在一起,此位置就是第一个数字 5 所在的位置。
上面这张图片是为了说明这一串数字每个数字的初始位置。
上面这张图 L 和 H 位是怎样移动的。因为在一开始 H 位处在这串数字的尾端,即第7个位置上,因为数字 7 > 5,所以此时不需要 H 和 L位置上的数字进行交换。然后 H 位继续向左移动,到了第6个位置,这个位置上的数字是3,因为 数字 3 < 5,所以,数字 3 和数字 5 要进行交换,结果就如上图所示。
接下来
L 位移动到了位置2,在位置2处的数字为2,因为数字 2 < 5,所以此时不需要交换 L 和 H位置的数字,然后L位继续向右移动,来到了位置3,此时,处于位置3处的数字是6,因为 6 > 5,所以,要交换数字 6 和数字5,结果就如上图所示。
接下来重复上面的过程:
总之:就是不断的寻找新的 L和新的 H位并且进行比较,如果L位上的数字 < H位上的数字则不替换,继续寻找,反之,进行替换,再继续寻找。一定要从 H位开始,依次向左移动。
最后L和H位在第四个位置处重叠,所以第四个位置就是数字5所在的序列中的位置。
注:这种快速排序的方法一次操作只能找出第一个数字的具体位置,并不能对整串数字进行排序,所以需要重复这个过程,知道每个数字都能对应到正确的位置上为止。