一.插入
1.指定位置插入
在i处插入一个元素x:
for(j=n-1;j>=i;j--) //定义j为最有一个元素,逐步递减,直至j=i
a[j+1] = a[j]; //右移,空出a[i]
a[i] = x; //插入x
n++; //表长增加1
注:插入a[i]需要移动n-i个元素,故T(n)=n-i。
二、删除
1.指定位置删除
删除元素第i个位置的a[i]:
for(j=i;j<n-1;j++) //注意j≠i+1
a[j] = a[j+1]; //左移,覆盖a[i]
n--; //表长减一
注:共移动n-i-1个元素 三、查找
1.顺序查找
从左往右:
for(i=0;i<n;i++)
if(a[i] == x)
return(i);
return(-1);
从右往左:
for(i=n-1;i>=0;i--)
if(a[i] == x)
return(i);
return(-1);
注:T(n)=O(n)
监督元:在查找终点预留一个存储结点
int SQsearch(int a[],int x,int n){
int i;
i = n; //查找起点
a[0] = x; //预置监督元
while(a[i]!=x)
i--;
return i;
}
注:0为无效地址
2.二分查找
①递归算法:
int binary_search(int a[],int x,int left,int right){
int mid;
if(left>right)
return -1;
mid = (left+right)/2; //定义mid的值
if(x==a[mid])
return mid;
if(x<a[mid])
return binary_search(a,x,left,mid-1); //x的值在左端
else
return binary_search(a,x,mid+1,right);
}
②非递归算法:
int binary_search(int a[],int x,int n){
int left,right,mid;
left = 0;
right = n-1;
whlie(left<=right){
mid = (left+right)/2;
if(x==a[mid])
return mid;
if(x<a[mid])
right = mid-1;
else
left = mid+1;
}
return -1;
}
注:T(n)=O(logn)