所用语言(C++)
顺序表有序插入方法1:
Status SqListInsert(SqList &L,ElemType e)//顺序表有序插入方法1
{
int i,j,k;
for(i=0;i<L.length;i++)//寻找e的插入位置
{
if(L.elem[i]>=e)
break;
}k=i;
for(j=L.length-1;j>=k;j--)//插入位置之后的元素后移
L.elem[j+1]=L.elem[j];
L.elem[k]=e;
++L.length;
return OK;
}
需要注意的是这里我采用一个变量k,用来得到此时大于等于e的值的元素的下标,即k是插入位置的下标,不是逻辑位置。
顺序表有序插入方法2:
Status SqListInsert(SqList &L,ElemType e)//顺序表有序插入方法2
{
int i,j;
while(i<L.length&&L.elem[i]<=e)//找到插入位置
{
i++;
}
for(j=L.length-1;j>=i;j--)//插入位置之后的元素后移
L.elem[j+1]=L.elem[j];
L.elem[i]=e;
++L.length;
return OK;
}
此方法相较于第一个方法,少引入了一个变量,但两种方法无独有偶。如果大家更喜欢用i来表示逻辑位置,而不是下标,只需要改变相应循环的判断即可。