基于线性表的动态顺序存储结构,试设计分类算法(part(sqlisrt &l)),将线性表中的正数和负数分开,0在中间(如果有0),并且,正数的相对位置不变,负数的相对位置也不变。
时间: 2023-04-25 19:03:43 浏览: 71
算法设计:
1. 定义两个指针,p和q,分别指向线性表的第一个元素和最后一个元素。
2. 从p开始向后遍历线性表,如果遇到正数就继续向后遍历,如果遇到负数就停止遍历。
3. 从q开始向前遍历线性表,如果遇到负数就继续向前遍历,如果遇到正数就停止遍历。
4. 如果p和q都停止遍历了,说明正数和负数已经全部分开了,算法结束。
5. 如果p和q都没有停止遍历,说明p和q都遇到了需要交换的元素,交换它们的值,然后继续遍历。
6. 重复步骤2-5,直到正数和负数全部分开。
7. 如果线性表中有,将插入到正数和负数之间。
算法实现:
void part(sqlist &l)
{
int p = , q = l.length - 1;
while (p < q) {
while (l.data[p] >= && p < q) p++;
while (l.data[q] < && p < q) q--;
if (p < q) {
int temp = l.data[p];
l.data[p] = l.data[q];
l.data[q] = temp;
}
}
if (l.data[p] == ) {
p++;
}
q = l.length - 1;
while (p < q) {
while (l.data[p] > && p < q) p++;
while (l.data[q] <= && p < q) q--;
if (p < q) {
int temp = l.data[p];
l.data[p] = l.data[q];
l.data[q] = temp;
}
}
}
阅读全文