设有一个顺序表L,其元素类型为整型类型,设计一个算法将L中所有小于0的证书放在前半部分,大于0的整数放在后半部分。
解:从L的两端查找,前端找大于等于0的元素(位置i),后端找小于0的元素(位置为j),然后将两位置的元素交换。(ps.其实就是快排的交换算法)
void move(Sqlist *l)
{
int temp;
int i=0;
int j=l->length-1;
while(i<j)
{
while(i<j && l->data[i]<0)++i;
while(i<j && l->data[j]>0)--j;
if(i<j)
{
temp=l->data[i];
l->data[i]=l->data[j];
l->data[j]=temp;
}
}
}