算法思想
快速排序之所比较快,因为相比冒泡排序,每次交换是跳跃式的。每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。这样在每次交换的时候就不会像冒泡排序一样每次只能在相邻的数之间进行交换,交换的距离就大的多了。
代码实现
int Partition(int k[], int low, int high) {
int point;
point = k[low];
while(low < high) { //交界处返回
while(low < high && k[high] >= point) { //从右往左找到第一个比基准点小的
high--;
}
swap(k, low, high); //交换
while(low < high && k[low] <= point) { //从左往右找到第一个比基准点大的
low++;
}
swap(k, low, high); //交换
}
return low; //返回交界点
}
void QSort(int k[], int low, int high) {
int point;
if(low < point) {
point = Partition(k, low, high);
QSort(k, low, point - 1);
QSort(k, point + 1, high);
}
}