本文目录一览:
C语言怎么用二分查找插入排序
进行二分查找的前提是数组已排序,这里假定数组递增排序。
每次查找都将待查找数num与处于数组中间位置a[mid]的数进行比较,num a[mid]则在mid之前的元素中进行查找,反之在mid之后的元素中进行查找。
在函数中使用low, mid, high来对待查找的范围来进行标记。
参考代码如下:
/*整数查找*/
void binsearch( int num, int a[], int length ) /*num为待查找数字,length为数组a的长度*/
{
int low, mid, high;
low = 0;
high = length - 1;
while( low = high )
{
mid = ( low + high ) / 2;
if( a[mid] num )
high = mid - 1;
else if( a[mid] num )
low = mid + 1;
else
return mid;
}
return -1 /*未查找到num返回-1*/
}
C语言二分法插入已排序的数组中
#includestdlib.h
void sort(int a[],int n){ /*排序函数,要使用二分法查找就必须对数组进行排序*/
int i,k;
for(i=0;in;i++){
int min=i;
for(k=i+1;kn;k++)
if(a[min]a[k])min=k;
if(i!=min){
a[min]+=a[i];/*这里是运用加减法交换两个数*/
a[i]=a[min]-a[i];
a[min]-=a[i];
}
}
}int find(int a[],int n,int key){/*二分法查找;参数:数组名,数组长度,查找关键字*/
int min=0,max=n-1;/*二分法查找头尾变量*/
while(minmax){/*如果最头的变量值大于最尾变量的值,则查找不到,查找失败*/
int cen = (min+max)/2;
if(a[cen]==key) return cen;/*如果查到,则返回关键字在排序数组的下标*/
if(cen==min || cen==max)break;/*如果中间变量等于头尾任一个变量,同样查找失败*/ if(a[cen]key) max=cen;
else min=cen; }
return -1;
}
void main(){/*主程序只是为了证明两个函数的可行性,可以自己编写*/
int a[]={14,10,25,36,87,95,10,12,13,8},i;
sort(a,10);
i=find(a,10,11);
if(i!=-1)
printf("be found");
else
printf("no found");
getch();
}
这是C语言求二分插入排序的程序,有问题,求教,急急急!!!
#include stdio.h
int main()
{
int a[11]; //a[0]作为哨兵,从a[1]到a[10]是真正数据
int low,mid,high;
int x;
int i,j,n;
n=10;
for(i=1; i=n; i++)
{
a[i]=0;
}
i=1;
printf("\n要插入的数是 (还有%d个):",n+1-i);
scanf("%d",x);
a[i]=x;
printf("x=%d\n",x);
printf("排列后 ");
for(j=1; j=n; j++)
{
printf(" %d",a[j]);
}
printf("\n");
for(i=2; i=n; i++)
{
printf("\n要插入的数是 (还有%d个):",n+1-i);
scanf("%d",x);
a[i]=x;
a[0]=a[i]; //a[0]作为哨兵
low=1;
high=i-1;
while(low=high)
{
mid=(low+high)/2;
if(a[mid] a[0])
{
high=mid-1;
}
else
{
low=mid+1;
}
}
//通过上述的折半查找,得出high值
//数据往后移动
for(j=i-1 ; j=high+1 ; j--)
{
a[j+1]=a[j];
}
//a[0]就是x,将x插入正确的位置
a[high+1]=a[0];
printf("\nx=%d\n",x);
printf("排列后 ");
for(j=1; j=n; j++)
{
printf(" %d",a[j]);
}
printf("\n");
}
printf("\n我是答案;");
for(i=1; i=n; i++)
{
printf(" %d",a[i]);
}
return 0;
}