通过折半查找的方法 进行查找元素的时候:
必须要保证要查找的元素集合collection是有序的。然后想象改需要查找的集合是有头又尾的,头为top,尾bottom.
(1)先把要查找的目标元素target,同集合的中间元素mid进行比较。
(2)如果target>collection[mid]则表示,目标元素在集合的右半部分中,因此【top=mid+1】。
(3)否则目标元素在左半部分,因此【bottom=mid-1】。
(4)然后重复这个过程,直到target==data[mid]--->>元素找到,或者top>bottom,元素未找到。
JAVA代码实现(非递归):
public class BiFind {
// 假如data[]数组是从小到大的
public static boolean find(int[] data, int target) {
int top = 0;
int bottom = data.length - 1;
while (top <= bottom) {
int mid = (top + bottom) / 2;
if (target < data[mid]) {
bottom = mid - 1;
} else if (target>data[mid]) {
top = mid + 1;
} else {
return true;
}
}
return false;
}
public static void main(String[] args) {
int[] data = new int[] { 1, 2, 3, 4, 5,5,5,5,6, 6, 6,11111 };
System.out.println(find(data, 5));
}
}
C代码实现【VC2005运行成功】:
改用C语言实现了一下,先对无序数组进行冒泡排序(bubble sort),然后再进行二分查找(递归实现)。
#include "stdafx.h"
int binarySearch(int target,int start,int end,int* arr);
void bubbleSort(int* arr,int length);
int main()
{
int a[]={1,233,3,4,5,6,337,811,9,10} ;
int length = sizeof(a)/sizeof(int);
int target = 10;
bubbleSort(a,length);
if(binarySearch(target,0,length-1,a)>0){
printf("target %d is found",target);
}
return 0;
}
int binarySearch(int target,int start,int end,int* arr){
int mid = (start+end)/2;
if(start>end) return -1;
if(start<=end){
if(target>arr[mid]){
return binarySearch(target,mid+1,end,arr);
}else if(target<arr[mid]){
return binarySearch(target,start,mid-1,arr);
}else{
return mid;
}
}
}
void bubbleSort(int* arr,int length){
for(int i=0;i<length;i++){
bool exchange = false;
//小心指针越界,j<length-1
for(int j=0;j<length-1;j++){
int temp = 0;
if(*(arr+j)>*(arr+j+1)){
temp=*(arr+j);
*(arr+j) = *(arr+j+1);
*(arr+j+1) = temp;
exchange =true;
}
}
if(!exchange) {
break;
}
}
}
分享到:
相关推荐
折半查找(二分查找)折半查找(二分查找)折半查找(二分查找)折半查找(二分查找)折半查找(二分查找)折半查找(二分查找)
数据结构习题---折半查找代码 void BinInsert(int A[],int &n,int item) { int j,low=1,high=n,mid; while(low) { /* 利用折半查找法查找合适位置*/ mid=(low+high)/2; /* 计算当前查找部分的中间位置*/ if...
由N个有序整数组成的数列已放在一维数组中,给定程序MODI1.C中函数fun的功能是:利用折半查找整数m在数组中的位置。若找到,返回其下标值;反之,返回-1。 折半查找的基本算法是:每次查找前先确定数组中待查的范围...
静态查找表。实现有序表的折半查找算法 静态查找表。实现有序表的折半查找算法 静态查找表。实现有序表的折半查找算法静态查找表。实现有序表的折半查找算法
使用折半查找,输入一个整数,查找是否在数组中,如在给出下标,否则-1
折半查找是数据结构中,查找的其中一种。此资源不但包括折半查找的算法,还包括帮助其运行的其他代码,可直接运行以实现折半查找。注:输入数据时,要将数据从大到小依次输入,方可实现折半查找。
折半查找的递归算法,非常实用,可以实现的C语言程序
查找问题(顺序查找法, 折半查找法,)基本思想:一列数放在数组a(1)---a(n)中,待查找的数放在x 中,把x与a数组中的元素从头到尾一一进行比较查找。用变量p表示a数组元素下标,p初值为1,使x与a(p)比较,如果x不等于a...
主要为大家详细介绍了C语言实现顺序表的顺序查找和折半查找,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
折半查找c语言函数, 在数组总查找 例子
数据结构折半查找,用于C语言版的数据结构。
会变课程设计 任意输入待比较的一组数据,排序,之后再输入需要查找的数,运行即可实现折半查找,界面友好
二叉排序树 折半查找
数据结构中的折半查找程序,C语言描述,数据结构中的折半查找程序,C语言描述
本程序共包含2个查找程序,分别是顺序查找和折半查找。
在该程序中,实现了在10个元素中查找20,用了顺序查找方法和折半查找方法。
java 快速排序 折半查找的界面实现 (递归与分治法)
折半查找算法在顺序表中插入一个元素讲解.pdf
折半查找是一种数据结构算法 非常有用 我们用C语言实现了查找 简单有效
用C语言实现折半查找,折半查找算法较简单