快速排序也是分治策略的一种典型体现:将待排序数据划分成更小的序列,对每个划分的序列进行交换。这里所谓的交换是指在单独的一个序列里面,选取一个枢纽(pivot),以此枢纽为划分点,将该序列里面所有小于枢纽的数据放于枢纽的左边,大于枢纽值的数据放于枢纽值的右边。
枢纽的选择有多种,一般有四种选择:选取序列第一个元素、选取序列最后一个元素、选取序列(First +Last)/2个元素、随机选取一个元素。在本文代码中,我们选取的是第一个元素。
template
<
class
T
>
int
partition(T
*
Array,
int
First,
int
Last)
{
T temp = Array[First];

while (First < Last)
{
while (First < Last && Array[Last] >= temp)
Last--;
Array[First] = Array[Last];

while (First < Last && Array[First] <= temp)
First++;
Array[Last] = Array[First];
}

Array[First] = temp;
return First;
}

template
<
class
T
>
void
quick_sort(T
*
Array,
int
First,
int
Last)
{
int p;

if (First < Last)
{
p = partition(Array, First, Last);
quick_sort(Array, First, p - 1);
quick_sort(Array, p + 1, Last);
}
}
枢纽的选择有多种,一般有四种选择:选取序列第一个元素、选取序列最后一个元素、选取序列(First +Last)/2个元素、随机选取一个元素。在本文代码中,我们选取的是第一个元素。































