【数据结构】排序算法の快速排序

193 阅读2分钟

排序概述

1、排序

排序就是将一组对象按照规定的次序重新排列的过程,排序往往是为检索服务的。

2、稳定性

n 个记录的序列为{R1,R2,…,Rn},其相应的键值序列为{k1, k2,…,kn},假设ki=kj,若在排序前的序列中 Ri 在 Rj 之前,即 i<j,经过排序后,Ri 仍在 Rj 之前,则称所用的排序方法是稳定的;反之,则称所用的排序方法是不稳定的。

(若待排序的序列中存在多个记录具有相同的键值,经过排序,这些记录的相对次序仍然保持不变,则称这种排序方法是稳定的。)

注意: 稳定性是排序方法本身的特性,与数据无关,换句话说,一种排序方法如果是稳定的,则对所有的数据序列都是稳定的,反过来,如果在一组数据上出现不稳定的现象,则该方法是不稳定的。

3、分类

内部排序(Internal Sorting):待排序的记录全部存放在计算机内存中进行的排序过程;

外部排序(External Sorting):待排序的记录数量很大,内存不能存储全部记录, 需要对外存进行访问的排序过程。

快速排序

1、概念

快速排序(Quick Sorting)是交换排序的一种,实质上是对冒泡排序的一种改进。

2、算法

用快速排序方法对 45 38 66 90 88 10 25 45 进行排序。 ★

image.png

当对整个记录序列 R 进行快速排序时,只需调用 QuickSort(R,1,n) 即可。

图 7-3 给出了第一次划分的结果。

图 7-4 给出了快速排序的完整过程,图中方括号表示无序区。

image.png

3、时间复杂度、稳定性

就平均时间性能而言,快速排序方法最佳,过程类似二叉树,其时间复杂度为 O(nlog2n)。

但在最坏情况下,即对几乎已是排好序的输入序列,该算法的效率较低,时间复杂度近似于 O(n^2)。另外,对于较小的 n 值该算法效果不明显;反之,对较大的 n 值效果较好。

快速排序是不稳定的。