排序算法之快速排序
//交换顺序表中子表的记录,使枢轴记录到位,并返回其所在位置
//此时在它之前(后)的记录均不大(小)于它
int Partition(int* arr, int low, int high)
{
int pivotkey = arr[low]; //用子表的第一个记录作枢轴记录
while (low < high) { //从表的两端交替向中间扫描
while ((low < high) && (arr[high] >= pivotkey))
high--;
if(low < high){
arr[low] = arr[low] ^ arr[high];//将比枢纽记录小弟记录交换到低端
arr[high] = arr[high] ^ arr[low];
arr[low] = arr[low] ^ arr[high];
}
while (low < high && arr[low] <= pivotkey)
low++;
if(low < high){
arr[low] = arr[low] ^ arr[high];//将比枢纽记录大弟记录交换到高端
arr[high] = arr[high] ^ arr[low];
arr[low] = arr[low] ^ arr[high];
}
}
return low; //返回枢轴所在位置
}
void QuickSort(int* arr, int low, int high)
{
int pivote = -1;
if (low < high) {
pivote = Partition(arr, low, high); //将arr一份为二 算出枢轴位置
QuickSort(arr, low, pivote - 1); //对低子表递归排序
QuickSort(arr, pivote + 1, high); //对高子表递归排序
}
}