LeetCode217,这道题我们先要将其进行排序,升序或降序均可。但是我们要是用最简单的冒泡排序的话,我们会超时。这时候我们就要用到快速排序。现在我先大致介绍下快速排序!
快速排序:
我们都知道,冒泡排序每次是对相邻的两个进行比较,而快速排序是从两端进行排序;
假设现在有一列数据要进行排序,
首先要先选择一个基准,这个基准是随意选,但是平时为了方便,我们选择第一个数作为基准
这里我们选择6为基准,那么我们开始找哨兵(哨兵A和B),这里在你写代码的时候可以用i和j。
A向左进行查找大于基准数,B向右查找小于基准数,每次都是B先开始。
(1)哨兵A找到7,哨兵B找到5
现在进行将哨兵A和哨兵B的值进行交换。
(2) 交换后,继续进行查找:
进行交换:
(3)交换后,依旧往后进行查找
现在哨兵AB在3的位置碰见了,那么下一个基准值就变为3,而6填到原来3的位置。
(4)现在以6为分界线,分成左边是小于6,右边是大于6 ,然后分开来进行排序,这里只拿左边为例。
哨兵B先往左找不到小于3的,哨兵A往右找不到大于3的,最后在2处碰见,那么就与2进行交换。
与基准6一样,接下来先对3的左侧进行排序,然后是右侧,最后接下来时6的右侧。 (4)对3的右侧进行排序。
(5)对6的右侧也进行类似排序,最后的结果是:
其实快速排序就是为了将基准放到对应的位置。
代码:
若有错误,请指出。