快速排序算法实现
快速排序法的时间复杂度是O(nlog2n)
快速排序使用分割法对表进行排序。算法给出一个中心值,用它将表分为两部分。快速排序在数组内将元素分为若干部分。下面是一个具体的例子。
(注意:写代码的时候要确定高、低索引,中间索引)
假设数组A中含有10个整数值:
A=800,150,300,600,550,650,400,350,450,700
索引从0到9,所以中间索引为4,对应值为550,
第一步将550与A[0]交换位置,变成550,150,300,600,800,650,400,350,450,700;
第二步从A[1]开始往中间进行搜索,如果搜索到大于550的数值就停止,此时开始从A[9]往中间开始搜索,如果发现小于550的数值就停止,然后交换这两个值,即由550,150,300,600,800,650,400,350,450,700变成550,150,300,450,800,650,400,350,600,700;以此类推550,150,300,450,350,650,400,800,600,700;550,150,300,450,350,400,650,800,600,700;然后将A[0]与400交换位置400,150,300,450,350,550,650,800,600,700;至此,以550为分界点,左边子表都是小于550的,右边都是大于550,然后利用递归思想将这两个边再利用快速排序实现。
template <class T>
//若元素个数小于1个,则返回
//若子表有两个元素,对其进行比较,并在必要时进行交换
//取中心索引并将其值赋给pivot
//交换pivot及低端元素的值并初始化扫描索引
//定位错位元素,并设定结束条件
//将pivot拷贝到scanDown位置,分开连个子表
//若低端子表有两个或更多元素,则进行递归调用
//若高端子表有两个或更多元素,则进行递归调用
}