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