1. 已知线性表按序存于内存中,每个元素都是整数,设计用最少时间把所有值为负数的元素移到全部正数值元素前面的算法。
思路:利用快速排序的思想,以最左侧记录作为枢轴,“j”从右向左扫描小于0的元素,“i”从左向右扫描大于等于0的元素。
算法代码如下:
SeqList Rearrange(SeqList a)
{
int i,j,t;
i=0;
j=a.Last-1; // i,j为工作指针(下标)
t=a.data[0]; // 暂存枢轴元素。
while(i<j)
{
while(i<j && a.data[j]>=0)
j--; // j指针前移找小于0的元素
if(i<j)
a.data[i++]=a.data[j]; // 将负数前移
while(i<j && a.data[i]<0)
i++; // i指针后移找大于等于0的元素
if(i<j)
a.data[j--]=a.data[i]; // 正数后移
}
a.data[i]=t; // 将原第一元素放到最终位置
return a;
}
2. 去除一个递增有序的链表中的重复元素。
思路:利用tra(遍历指针)遍历链表、com(比较指针)判断是否为相同数值、