题目要求:
某顺序表L的数据元素类型为ElemType。试设计一个时间复杂度为O(n),空间复杂度为O(1)的算法Adjust(SqList &L),以L中第一个元素为基准,将L中所有小于该元素的数据元素移到该元素的前面,大于该元素的数据元素移到该元素的后面。
代码实现:(算法)
//一趟快速排序调整元素位置
int Adjust_Sq(SqList& L)
{
ElemType i = 0, j = L.length-1;
ElemType key = *(L.elem);
while (i < j)
{
while (L.elem[j] > key && i < j)
j--;
L.elem[i] = L.elem[j]; //直接把L.elem[j]覆盖在L.elem[i]上
while (L.elem[i] <= key && i < j)
i++;
L.elem[j] = L.elem[i];
}
L.elem[i] = key; //key覆盖在L.elem[i]上
return OK;
}