快速排序简述

基本思想

将无序数组中的每一个数都放到正确的索引位置。

  1. 在无序数组中随机选择一个数作为基准数字pivot。
  2. 将大于pivot的数字放在pivot的右边位置,将小于pivot的数字放在pivot的左边位置。
  3. 此时pivot位于正确索引,分别对左右两个序列重复1.2步骤,直到所有数字都找到正确索引。

 

 假设无序数组如下:

快速排序简述

我们每次都选择无序数组中的第一个数作为基准数字,因此选择17作为基准数字pivot,为了将小于17的数字放到左边,大于17的数字放到右边,我们设定两个下标,指向无序数组中的第一个数和最后一个数,如下图中,L下标从左往右移动,R下标从右往左移动。

快速排序简述

首先,将R下标所指的数与pivot比较,5<17,则把5放到L下标位置。(若大于17,则不动,R下标继续移动)

快速排序简述

然后,L下标向右移动, 将57与pivot比较,57>17,此时将57放到R下标位置。

快速排序简述

 再回到R下标,继续向左移动,2<17,将2放到L下标位置。

快速排序简述

再回到L下标 ,继续向右移动,对比6<17,此时不动。

快速排序简述

L下标继续移动,15<17,依然不动。

 快速排序简述

 L下标继续移动,此时L与R重合,则将pivot放到该位置,第一次排序结束。

快速排序简述

 其中,17已回归正确的索引位置,左边序列的数都比17小,右边序列的数都比17大。快速排序简述

 我们分别对左右两边的序列重复上述步骤(由于右序列下标已经重合,因此57也正确归位)  快速排序简述

上一篇:python3 基础语法


下一篇:Leetcode - 57. 插入区间