700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > python语言折半查找_C语言折半查找 - 胡若晨的个人空间 - OSCHINA - 中文开源技术交流社区...

python语言折半查找_C语言折半查找 - 胡若晨的个人空间 - OSCHINA - 中文开源技术交流社区...

时间:2023-10-09 00:11:51

相关推荐

python语言折半查找_C语言折半查找 - 胡若晨的个人空间 - OSCHINA - 中文开源技术交流社区...

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

> File Name: bin_search.c

> Author:heathcliff

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

> Created Time: 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的位置

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。