快速排序是对冒泡排序的一种改进。使用分治的策略进行排序。
基本思想:通过一遍排序将待排序数据划分为两部分,使其中一部分比另一部分小,然后分别对两部分数据继续进行快速排序,直至每部分为空或只包含一个数据。通过快速排序思想的描述可以很明显的看出快速排序是一种采用递归排序的方法。
具体排序过程:
通过分治策略将序列分为两个子序列
(1)首先,从数列中挑出一个元素作为“基准”,
(2)扫描一遍数列,将所有比“基准”小的元素排在基准前,所有比基准大的元素排在基准后,
(3)递归划分子序列为更小的序列,直到把两部分子序列排序完成。
分割数据序列的具体方法:
(1)首先取数列第一个元素为基准,记为base,left保存数列最小序号,right保存最大序号,
(2)然后从数列右侧开始逐个取出元素与base比较,直到找到第一个比base小的元素,
(3)将右侧找到的比base小的元素保存到left序号中,
(4)然后从数列左边开始逐个取出元素与base比较,直到找到第一个比base大的元素,
(5)将左侧找到的比base大的元素保存到right序号中,
(6)将base的值保存在left中,这期间,比较过程中,left及right的值会因元素值与base的大小关系而自增或自减,(left自增,right自减)
(7)经过一次分割,base中的元素储存在序号left中,其左侧数据小于base,右侧数据大于base,
(8)递归调用,将base左侧数据及右侧数据进行同样的排序。
快速排序的具体方法:
(1)分割数据,找到以base为基准的两部分子序列,并将base元素的序号保存为i;
(2)对前半部分快速排序;
(3)对后半部分快速排序;
c++代码实现:
1.随机数生成部分同前
2.分割数据序列的函数 Division
3.快速排序函数 QuickSort
4.测试主函数 TestMain 只需修改函数调用部分为QuickSort
分割数据函数部分:
快速排序函数部分: