// 快速排序,升序
void myqsort(int* arr, int left, int right) {
if (left >= right) {
return;
}
int i = left;
int j = right;
int key = arr[i]; // 取第一个元素为标兵,作为比较值
while (1) {
while (i < right && arr[i] <= key) { // 从左往右找>key的元素
++i;
}
while (j > left && arr[j] >= key) { // 从右往左找<key的元素
--j;
}
if (i >= j) { // 没有找到介于key两侧的元素 或者 arr[i] = arr[j] = key;此时不用交换两侧元素,直接进行下一轮
break;
}
// 介于key两侧的数值逆序,需交换位置
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
arr[left] = arr[j]; // 小于key的值归位
arr[j] = key; // key值归位
myqsort(arr, left, j-1);
myqsort(arr, j+1, right);
}