C语言二分法插入已排序的数组中

能解释一下框起来的部分吗

#include<stdlib.h>
void sort(int a[],int n){ /*排序函数,要使用二分法查找就必须对数组进行排序*/
int i,k;
for(i=0;i<n;i++){
int min=i;
for(k=i+1;k<n;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(min<max){/*如果最头的变量值大于最尾变量的值,则查找不到,查找失败*/
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语言中,怎样把一个整数按大小顺序插入已经排好序的整形数组中?
主要通过动态数组实现,malloc分配初始数组,realloc重新分配大小,具体代码如下,#include <stdio.h>#include <stdlib.h>void bubble_sort(int a[], int n);\/\/冒泡法排序 int midsearch(int a[],int n,int x);\/\/二分法查找插入位置int main(int argc, char *argv[]){ int *arr=NULL; int n=0;\/\/初始...

c语言如何实现-数组排序,二分查找
给定已经排好序的n个元素,现在要在这n个元素中找出一特定元素x。顺序搜索的方法是逐个比较,直至找出元素。二分搜索则利用了元素间的次序关系,可大大提高效率。二分法的基本思想是将n个元素分成个数大致相同的两半,取a[n\/2]与x作比较。如果x==a[n\/2],则终止。如果xa[n\/2],则只需在右半...

C语言二分法编程问题
mid = (left + right)\/2; \/* mid指向已排序区间的中间位置 *\/ if (temp.key < data[mid].key)right = mid-1; \/* 插入元素应在左子区间 *\/ else left = mid+1; \/* 插入元素应在右子区间 *\/ } for (j = i-1; j >= left; j--)data[j+1] = data[j];...

设a[0:n-1]是已排好序的数组.请改写二分搜索算法,使得当被搜索元素x...
include <stdio.h>int main(){int ip[100],n,key,i,mid,lt=0,rt,fg=0;printf("请输入数组长度:");scanf;printf("请输入已排序的数组:");for(i=0;i<n;i++)scanf("%d",ip+i);printf("请输入待查找数:");

C语言,随机生成20个数从大到小排列,找到大于平均数的值输出。再输入任意...
include <stdio.h>#include "stdlib.h"#include "time.h"int main(void){ int a[20],i,j,k,t; srand((unsigned)time(NULL)); for(t=i=0;i<20;a[i++]=rand()%1000); for(i=0;i<20;i++){ for(k=i,j=k+1;j<20;j++) if(a[k]...

c语言中如何将顺序表排序并实现二分法查找
void InsertSort(sq R)这个函数是按值传递参数的。换句话说,你的顺序表在传递的时候被复制了一遍,然后这个函数收到的是一个副本,然后这个程序也许成功排序了这个副本,但是你原来的顺序表并没有改变。你可以考虑传递这个顺序表的指针。比如这样 void InsertSort(sq *pR){ sq R = *pR; \/\/...

用c语言写一个算法(折半或二分法),实现可以选择1到20的从小到大以
解:用有序列插入法排序,过程如下:第一步:7 1 (前两个数7,1排成有序列)第二步:7 3 1 (第3个数3按要求插入到已排好的有序列中)第三步:12 7 3 1 (第4个数12按要求插入到已排好的有序列中)第四步:12 8 7 3 1 (第5个数8按要求插入到已...

C程序编写,将一个数插入到一个已经有序的数组里,要求保持有序
int a[n], b[n + 1];\/\/定义两个数组 printf("您喜欢的有序数组:\\n");\/\/输入数组序列文字提 for (i = 0; i < n; i++){ scanf("%d", &a[i]);\/\/循环输入数组元素 } printf("请输入想插入的数字\\n");\/\/输入要插入的数字 scanf("%d", &k);for (i = 0; i <= n; ...

c语言 谁会使用二分法法,查找从键盘输入的任意一个数,是否在下面的数据...
using namespace std;int num[7]={1,3,5,7,9,11,13}; \/\/已经排序 \/\/A[low]~~A[high]区间内二分查找关键字为 key 的元素;\/\/low 和 high 的初始值分别对应0 ,n-1 int Binsch(int A[], int low, int high,int key){ if( key > 13) return -1;\/\/表示匹配不成功 if(low...

bsearch简介
第二个参数:base,是你要搜索的数组的起始地址。第三个参数:nelem,表示数组中元素的数量。第四个参数:width,每个数组元素的大小,以字符为单位。第五个参数:fcmp,是一个指向比较函数的指针,用于判断数组元素之间的关系。<bsearch的工作原理是:在已排序的数组buf[0] 到 buf[num-1]中,通过...

相似回答