排序算法之——快速排序
1、序
作为一名前端开发工程师,算法也是不可以不略的一part,特别是排序,在项目实际开发中,也会经常用到。今天我们就一起重温一下,什么是快速排序,它是如何进行排序的,最后我们再手写一个快速排序。
2、什么是快速排序,如何进行排序呢?
快速排序( Quicksort )是对冒泡排序算法的一种改进,排序规则如下:
- 选择一个中心点Pivot(在这里我选择的是最左边的第一个值为中心点);
- 选定两个指针,分别是
L
和R
分别指向数组最左边和最右边的位置; - 将R指向的数据和Pivot作比较,大于则指针移动,继续比较,小于则将和
L
指针指向的值进行替换;(原则就是右边的必须比Pivot大); - 将L指向的数据和Pivot作比较,小于则指针移动,继续比较,大于于则将和
R
指针指向的值进行替换;(原则就是左边的必须比Pivot小); - 当
L
和R
指向重合时,则将Pivot的值放在指针所指的位置; - 此时数组可以以Pivot为中心点,分为左、右子序列,对左、右子序列进行上述步骤,指导左右子序列仅为一个值时,即完成排序;
3、举个例子
我么以数组 arr = [19, 97, 9, 17, 1, 8]
为例子。
- 首选,以左一为Pivot值,即Pivot=19,指针
L
和R
分别指向序列左边和右边
- 将
Pivot
和arr[R]
进行对比,19 > 8,Pivot
大于arr[R]
,则将arr[R]
赋值给arr[L]
(R
指针在Pivot
的右边,则当arr[R]
小时,将arr[R]
放在左边)
-
L
指针向右移动,到L=1,Pivot
和arr[L]
进行对比,19 < 97 ,Pivot
小于arr[L]
,则将arr[L]
赋值给arr[R]
(L
指针在Pivot
的左边,则当arr[L]
大时,将arr[L]
放在右边)
-
R
指针向右移动,到R=4,Pivot
和arr[R]
进行对比,19 > 1 ,Pivot
大于arr[R]
,则将arr[R]
赋值给arr[L]
L
指针向右移动,到L=2,Pivot
和arr[L]
进行对比,19 > 9,Pivot
大于arr[L]
,则