利用折半查找方法在长度为n且按值有序的顺序表K中查找并删除数据元素item,编写算法并分析该算法的时间复杂度(要求给出较为详细的分析过程)
解题思路:hht(详细描述折半查找)
解题思路:
1.设置low和high分别为一维数组的首尾标记,mid为(low+high)/2,即中值
2.当mid与带查找元素x相等时,则将mid及后面的数据元素均向前移一位
3.若mid大于x,则在mid的左边查找,将high置为mid-1
4.若mid小于x,则在mid的右边查找,将low置为low+1
- #include
- #include
- using namespace std;
-
- int Del(int a[],int n,int x)
- {
- int low=0,high=n-1;//左右边界
- int mid=(high+low)/2;//中值
- while(low<=high)
- {
- if(a[mid]==x)
- {
- for(int k=mid;k
-1;k++)//后边数据均前移一位 - {
- a[k]=a[k+1];
- }
- n--;//总长-1
- return n;
- }
- else if(a[mid]>x)
- {
- high=mid-1;
- mid=(high+low)/2;
- }
- else
- {
- low=mid+1;
- mid=(high+low)/2;
- }
- }
- return n;
- }
-
- int main()
- {
- int n=10;
- int a[n]={1,2,3,4,5,6,7,8,9,10};
-
- n=Del(a,n,7);
- for(int i=0;i
- {
- printf("%d ",a[i]);
- }
- printf("\n");
- return 0;
- }