62库

您现在的位置是:首页 > 前端开发 > JavaScript > 正文

JavaScript

c语言折中查找函数运用,c语言折半查找算法

Admin2023-11-11JavaScript46

帮我写下C语言折中查找的主函数

主函数:

main()

{

RecType *tmp=new RecType[N];

for(int i=0;iN;i++)

tmp[i].key=i;

SSTable sst;

sst.len=N;

sst.list=tmp;

printf("%d",BinarySearch(sst,6,cmp));

}

还要写一个比较函数在外边:

int cmp(KeyDT a,KeyDT b)

{

return a-b;

}

然后就可以用了!

c语言的折中查找法的算法

#include stdio.h

#define N 21

void main(void)

{

int a[N];

int i,n,num;

int top,bottom,mid;

int flag=1; //如果在表列中找到数字,则值为1,否则为0

int loc=-1;//要查找的数在表列中的位置,如果loca=-1表示表列中没有这个数;如果有这个数,则它的值为所在的位置

printf("你想在多少个数中进行折半查找,请输入(1--20):");

scanf("%d",n);

while(n1 || n20)

{

printf("你输入的数不正确,请重新输入。\n");

printf("你想在多少个数中进行折半查找,请输入(1--20):");

scanf("%d",n);

}

printf("请你输入一个整数 a[1]:");

scanf("%d",a[1]);

i=2;

while(i=n) //输入从小到大的表列

{

printf("请你输入一个整数 a[%d]:",i);

scanf("%d",a[i]);

if(a[i] a[i-1])

i++;

else

printf("你输入的数不满足要求,请重新输入。\n");

}

//输出表列

printf("\n输出表列\n");

for(i=1; i=n; i++)

{

printf("%6d",a[i]);

}

printf("\n");

printf("请你输入要查找的数:");

scanf("%d",num);

flag=1; //假设输入的数在表列中

top=n;

bottom=1;

mid=(top+bottom)/2;

while(flag)

{

printf("top=%d, bottom=%d, mid=%d, a[%d]=%d\n",top,bottom,mid,mid,a[mid]);

if( (numa[top]) || (numa[bottom]) ) //输入的数 numa[top] 或者 numa[bottom],肯定num不在这个表列中

{

loc=-1;

flag=0;

}

else if(a[mid]==num) //如果num 等于找到的数

{

loc=mid;

printf("找到数 %6d 的位置%2d\n",num,loc);

break;

}

else if(a[mid]num) //若 a[mid]num,则num 一定在 a[bottom]和a[mid-1]范围之内

{

top=mid-1;

mid=(top+bottom)/2;

}

else if(a[mid]num) //若 a[mid]num,则num 一定在 a[mid+1]和a[top]范围之内

{

bottom=mid+1;

mid=(top+bottom)/2;

}

}

if(loc==-1)

{

printf("%d 这个数在表列中没有找到。\n",num);

}

printf("折半查找结束:");

scanf("%d",n);

}

c语言中的折半查找法是什么原理?

刚开始的时候数组时排好顺序的:从小到大,或者从大到小。然后将这个数组折中,用中间的这个数和要查找的数比较大小,(例如:如果我从小到大,我将数组这种后,用中间的数和要查找的数比较,如果小,则那个要查找的数绝对在中间靠左的范围里,如果大,则那个要查找的数绝对在中间靠右的范围里,然后同理,慢慢慢慢缩小范围,知道查找到为止)

C语言查找的用法

#include stdio.h

#include stdlib.h

#include time.h

#define N 20

void Sort(int a[],int n)  {

int i,j,k,t;

for(i = 0; i  n - 1; ++i) {

k = i;

for(j = i + 1; j  n; ++j) {

if(a[k]  a[j]) k = j;

}

if(i != k) {

t = a[k];

a[k] = a[i];

a[i] = t;

}

}

}

int Find(int a[],int n,int x) {

int low = 0,high = n - 1,mid;

while(low = high) {

mid = (low + high)/2;

if(x == a[mid]) return mid;

else if(x  a[mid]) low = mid + 1;

else high = mid - 1;

}

    return -1;

}

void Show(int a[],int n) {

int i;

for(i = 0; i  n; ++i) {

printf("%d ",a[i]);

}

printf("\n");

}

int main() {

    int a[20],i,x,res;

    srand((unsigned)time(NULL));

    for(i = 0; i  N; ++i) 

     a[i] = rand()%N; // 每个数都在1 -- 100之间 

    Show(a,N);

Sort(a,N);

Show(a,N);

x = rand()%100 + 1;

res = Find(a,N,x);

if(res = 0) printf("数值%d的下标为%d。\n",a[res],res);

else printf("数列中没有找到数值%d。\n",x);

    return 0;

}

c语言编程实现“折半查找”的过程。

//参考代码如下:

#include stdio.h

int main()

{

int i, j, n, k=0, isFound=0;

int num[15] = {88,86,75,74,61,56,52,43,39,34,31,22,18,16,8}; //测试数组

printf("请输出一个整数:\n");

scanf("%d", n);

i = (int)15/2; //对折位移量

j = (int)15/2; //取数“指针”

while(k2)

{

i = (int)i/2;

if(i == 0) k++; //i==0 即折半到无可再折时,仍有最后一次比较,故以k做计数

//若未相等,计算下一循环指针的位置

if(nnum[j])

j = j + (i + 1);

else if(nnum[j])

j = j - (i + 1);

else

{

isFound = 1;

break; //若找到相等数,标记已找到并退出循环

}

}

//输出结果

if(isFound)

printf("该数是数组中第%d个元素的值\n", j);

else

printf("查无此数!\n");

return 0;

}

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~