if (low >= high) return; // 递归边界:子序列长度为1或0时直接返回
int i = low, j = high;
L.r[0] = L.r[low]; // 用子序列的第一个元素作为枢轴(哨兵)
KeyType pivot = L.r[low].key; // 保存枢轴关键字
while (i < j) {
// 从右向左找小于枢轴的元素
while (i < j && L.r[j].key >= pivot) j--;
if (i < j) L.r[i++] = L.r[j]; // 将找到的元素放到左方
// 从左向右找大于枢轴的元素
while (i < j && L.r[i].key <= pivot) i++;
if (i < j) L.r[j--] = L.r[i]; // 将找到的元素放到右方
}
L.r[i] = L.r[0]; // 将枢轴放到最终位置