c语言折半查找输出坐标,C语言折半查找

9037078a0e92b7473dd0781ac70760d7.png

/*************************************************************************

> File Name: bin_search.c

> Author:heathcliff

> Mail:---------------------

> Created Time: 2016年04月05日 星期二 18时12分46秒

************************************************************************/

#include

#define M 5

/*折半查找法*/

int bin_search(int A[],int n,int key)

{

int low,high,mid;

low = 0;

high = n-1;

while(low <= high){

mid = (low + high)/2;

if(A[mid] == key)

return mid;

else if(A[mid] < key)

low = mid + 1;

else

high = mid - 1;

}

/*查找失败*/

return -1;

}

/*直接插入排序*/

int insert_sort(int A[],int n)

{

int i,j,temp; //temp 保存中间值

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

temp = A[i];

j = i - 1;

while(j >= 0 && temp < A[j]){ //找到插入位置

A[j+1] = A[j];

j -- ;//j向后移动

}

A[j+1] = temp; //插入temp处的值

}

}

int main(void)

{

int A[M];

int i;

int n , m;

printf("请输入数组的值:");

for(i = 0;i < M;i++)

scanf("%d",&A[i]);

printf("\n你输入的值为:");

for(i = 0;i < M;i++)

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

printf("\n");

insert_sort(A,M);

for(i = 0;i < M;i++)

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

printf("\n");

printf("请输入你要查找的值:\n");

scanf("%d",&n);

m = bin_search(A , M , n);

if(-1 != m){

printf("排序后,你查找的值在数组的第%d 的位置\n",m);

}

else

printf("查找失败\n");

return 0;

}

分析:

输入的值为:10,5,9,8,7

1. 排序

首先 i = 1;temp = A[i] = 5;

j = i -1 = 0;

判断j>= 0 && temp < A[0] = 10 ?,判断成立

A[1] = A[0] = 10;//值交换

j = -1;

判断 j> = 0 判断不成立

A[1] = 5;

如此一来:输入的值变为了5,10,9,8,7

第二轮:i = 2; temp = A[2] = 9;

j = i - 1 = 1;

判断 j>=0 && temp

A[2] = A[1] = 10;//交换值

j = 0;

判断 j>= 0&& temp < A[0] ?判断不成立

A[1] = temp = 9;

这么一搞:输入值就又变成了:5,9,10,8,7

以此类推,即可将输入数组有序排列为 5,7,8,910

2. 折半查找

假设要找的值为7 , 即key = 7

low = 0;

high = 4;

mid = 2;

A[2] = 8 > key ;

high = mid - 1 = 1;

mid = 0;

A[0] = 5 < 7;

low = mid + 1 = 1;

mid = 1;

A[mid] = key;

找到7的位置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值