鱼C论坛

 找回密码
 立即注册
查看: 4109|回复: 5

数据结构与算法

[复制链接]
发表于 2013-6-17 10:48:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
折半查找的算法 ,用C实现,在哪里?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-17 12:42:42 | 显示全部楼层
期待。。。。。。。。。。。。。。。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-17 13:24:31 | 显示全部楼层
package binarySearch;

public class binarySeachComparable <T extends Comparable<T>>{
       
        //问题,如何来使用comparable<T>接口
       
        //采用折半查找的算法思想来解决这个查找问题
        //折半查找的条件:
        //1、将无序的数列排为有序的数列、这里采用的是线性表顺序存储结构
        //2、采用折半查找的算法
       
        public int binarySearch(T []value,T key){
                System.out.println("最后所得到的下标为:"+binarySearch(value, 0,value.length-1,key));
                return binarySearch(value, 0,value.length-1,key);
        }

        private int binarySearch(T []value,int begin,int end,T key) {
                if(value==null||key==null){
                        return -1;
                }
                while(begin<=end){
                        int mid=(begin+end)/2;
                        System.out.println(mid+"?");
                        if(value[mid].compareTo(key)==0){
                                return mid;
                        }
                        if(value[mid].compareTo(key)>0){
                                //key值比mid值要小些
                                end=mid-1;
                        }
                        else{
                                begin=mid+1;
                        }
                }
                return -1;
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-17 13:25:49 | 显示全部楼层
这是java版的, C的思想应该和之差不多,可以参考下,需要注意的是才用折半查找的前提条件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-17 13:39:12 | 显示全部楼层
c语言版的折半查找

#include<stdio.h>
#include<stdlib.h>

#define N 19

int main(){
int a[N]={2,5,6,7,8,13,15,17,21,23,25,26,27,28,35,41,52,63};
int mid,bot,top,x;

top=0;
bot=N-1;

printf("请输入要找的元素:");
scanf("%d",&x);

while(top<=bot){
mid=(top+bot)/2;

if(x==a[mid]){
printf("\n找到的元素 %d是:a[%2d]\n",x,mid);
exit(0);
}


else if(x>a[mid]){
top=mid+1;
}
else{
bot=mid-1;
}
}
printf("没有找到该元素!\n");

return 0;

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-20 21:03:08 | 显示全部楼层
学习学习。。。。。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 06:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表