/*快速排序的核心思想是分治策略,即先分解再递归求解,最后再合并。
具体来说就是在待排序记录序列中选取一个记录(通常先选取第一个记录)为驱轴,其关键字设为K1,然后将其余关键字小于K1的记录移到前面,
而将关键字大于K1的记录移到后面,这样K1就将记录分成了两部分,这有点类似于二分查找。在一次划分之后,对分割后的子表继续按上述原则
进行分割,直到所有的子表长不超过1为止,此时待排序记录序列就变成了一个有序表。*/
//快速排序性能:
//快速排序的性能取决于PARTITION操作,它是否是平衡操作,即能否将数组分为两个大小差不多的数组。如果他分配不均的话,就变成了插入排序。
int Partition(int *pData,int left,int right)
{
int pivotKey = pData[left];
int low = left;
int high = right;
while(low < high){
while(low < high&&pData[high] >= pivotKey)
high--;
//high从右向左找小于pivotKey的元素
if(low < high){
pData[low] = pData[high];
low++;
}
while((low < high)&&pData[low] < pivotKey) low++;
if(low < high){
pData[high] = pData[low];
high--;
}
}
pData[low] = pivotKey;
return low;
}
void QuickSort(int *pData,int left,int right)
{
if(left < right){
int pivotLoc = Partition(pData,left,right);
QuickSort(pData,left,pivotLoc - 1);
QuickSort(pData,pivotLoc+1,right);
}
return;
}