我们之前学习了冒泡排序算法,我们知道,在冒泡排序过程中,只对相邻的两个元素进行比较,因此每次交换两个相邻的元素时只能消除一个逆序。如果能通过两个(不相邻)元素的一次交换,消除多个逆序,则会大大加快排序的速度。而这就是本篇文章讲述的另一种基本排序算法——快速排序算法。
快速排序
快速排序是通过冒泡排序改进得来的,冒泡排序每次元素的交换只能消除一个逆序,而快速排序的一次元素交换可以消除多个逆序,从而大大提高排序的效率。
快速排序的算法思想
通过一次元素的交换消除多个逆序,以提高排序的效率。
快速排序的实现过程
在待排序的n个元素中任取一个元素(通常取第一个元素)作为枢轴,记录它在序列中位置为pivotkey,记录待排序元素的第一个元素的位置为low,最后一个元素的位置为high。通过一次排序之后,比枢轴小的元素全部排列在起左侧,比枢轴大的元素全部在其右侧,然后通过枢轴作为分界线,将原数列一分为二(一个子列从low到pivotkey-1,另一个子列从pivotkey+1到high),对两个新生成的子列重复上述过程,直到所有新生成的子列只有一个元素,则排序完成。
是不是有点抽象,有点难理解,没事~我们举个例子,来演示一下这个过程。
例如:我们要对数列[49,38,65,97,76,13,27,49]进