前段时间一直在学习数据结构,在看快排时会有点小困难,不知有没有小伙伴跟我一样笨呢!
不过幸好查看完在各大资料后理解了!
接下来讲下快速理解的方法,希望对初学懵懂者有用!
以下例子
[4、2、3、1、6、7、10、8]
1.最先开始要找一个为基准,这个基准是最后才放进去的,是先存储到一个指针里面,一般是找第一个数为基准,即4
[4、2、3、1、6、7、10、8] 4
2.可以在源码中看到,快速排序选完基准后是要让这个数的右边全部大于这个数,而左边全部小于这个数,这个算法的思想是提供了两个指针,规定刚开始一个指针指向头,一个指针指向尾,即指向4和8。
| (头指针) |(尾指针)
[4、2、5、1、6、7、10、8] 4
|(基准)
3.先从尾指针开始从右往左第一个找比基准4小的元素,然后把这个元素放到基准的位置,自行手动后可得出下面结果:
| |
[1、2、5、 、6、7、10、8] 4
|
然后从头指针开始从左往右找出第一个比基准4大的元素,然后把这个元素放到基准的位置,自行手动后可得出下面结果:
||
[1、2、 、5、6、7、10、8] 4
|
当发现头指针尾指针重叠时,好,第一趟快速排序结束,其结果为:
[1、2] 4 [5、6、7、10、8]
这样第一趟排序的基准 4 就左边全部小于4,右边全部大于4了
然后4的左边和右边分别进行快速排序
然后一趟一趟下来后就排序完成了
希望大家动手模拟一下以方便快速理解