vlambda博客
学习文章列表

排序算法02-快速排序

核心思想:
  1. 在待排序的N个数组元素中任取一个元素(通常取第一个元素)作为“基准值”—key;

  2. 定义待排序数组第1个元素的索引为leftIndex(首索引),最后1个元素的索引为rightIndex(尾索引);

  3. 首先,从rightIndex(尾索引)不断向前扫描数组元素,直到找到比key(基准值)小的元素,并替换leftIndex(首索引)对应的数组元素;

  4. 然后,从leftIndex(首索引)不断向后扫描数组元素,直到找到比key(基准值)大的记录,并替换rightIndex(尾索引)对应的数组元素;

  5. 若在向前扫描或者向后扫描数组元素过程中,首索引等于尾索引(leftIndex == rightIndex),则一轮排序结束,并且,将key(基准值)替换leftIndex(首索引)所对应的数组元素,待排序数组被分成两个区:[0,leftIndex-1],[righIndex+1,N];否则,一轮排序继续,继续执行步骤3和步骤4。

  6. 在一轮排序结束后,对两个分区重复执行步骤1~5;直到所有分区的数组元素都有序,快速排序算法结束。


算法复杂度:
  1. 时间复杂度:O(nlogn)。

  2. 空间复杂度:O(logn)。


动画演示:

代码实现及运行结果:
1.Java版本
排序算法02-快速排序
排序算法02-快速排序

排序算法02-快速排序

2.CPP版本
排序算法02-快速排序