利用折半查找方法在长度为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<stdio.h>
#include<algorithm>
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<n-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<n;i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}