作者:朱金灿<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
来源:http://blog.csdn.net/clever101
-
#include<stdio.h>
-
#include<string.h>
-
char*flab[]=
- {
-
"actually",
-
"just",
-
"quite",
-
"really",
- NULL
- };
-
-
intlookup(char*word,char*array[])
- {
-
inti;
-
for(i=0;array[i]!=NULL;i++)
- {
-
if(strcmp(word,array[i])==0)
- {
-
returni;
- }
- }
-
return-1;
- }
-
intmain(intargc,char*argv[])
- {
-
printf("%d/n",lookup("quite",flab));
-
return0;
- }
-
typedefstructNamevalNameval;
-
structNameval
- {
-
char*name;
-
intvalue;
- };
- Namevalhtmlchars[]=
- {
-
"AElig",0x00c6,
-
"Aacute",0x00c1,
-
"Acirc",0x00c2,
-
"zeta",0x03b6
- };
-
-
intlookup2(char*name,Namevaltab[],intntab)
- {
-
intlow,high,mid,cmp;
- low=0;
- high=ntab-1;
-
while(low<=high)
- {
- mid=(low+high)/2;
- cmp=strcmp(name,tab[mid].name);
-
if(cmp<0)
- high=mid-1;
-
elseif(cmp>0)
- low=mid+1;
-
else
-
returnmid;
- }
-
return-1;
- }
二分检索只能用在元素已经排好序的数组上。如果需要对某个数据集反复进行检索,先把它排序,然后再用二分检索就会是很值得的。如果数据集事先已经知道,写程序时就可以直接将数据排好序,利用编译时的初始化构建数组。
最好的排序算法之一是快速排序(quicksort)。快排的工作方式是:
从数组中取出一个元素(基准值)。
把其他元素分为两组:
“小的”是那些小于基准值的元素;
“大的”是那些大于基准值的元素。
递归地对这两个组做排序。
快排算法的一种实现如下:
-
voidquicksort(intv[],intn)
- {
-
inti,last;
-
if(n<=1)
-
return;
-
- swap(v,0,rand()%n);
-
last=0;
-
-
for(i=0;i<n;i++)
- {
-
if(v[i]<v[0])
- {
- swap(v,++last,i);
- }
- }
-
- swap(v,0,last);
-
- quicksort(v,last);
-
- quicksort(v+last+1,n-last-1);
- }
这时我脑海中产生的一个问题是:在一般情况下采用快排+二分检索是不是就比顺序检索快呢?思考:使用循环方式实现快排算法。
分享到:
相关推荐
本书以 Visual C++ 6.0为平台,结合 Visual C++ 6.0和MFC应用程序设计框架的最新规范,从基本的操作和技巧入手,以恰当的实例为导向,对实例代码进行层层图解的方式,由浅入深地介绍了 Visual C++开发的基本理论知识...
为了将实际开发过程中总结的有价值的技术应用分享给大家,周立功及其团队整理出《程序设计与数据结构》这本书,其内容如同培训讲师的教案,是周立功和团队的读书笔记和程序设计实践的心得。
它旨在提供一个全面、深入的学习和研究工具,适用于本科课程设计、毕业设计以及任何希望深入学习Java编程的学习者。 详细内容: 源代码——提供了一套完整、经过良好注释的Java源代码,实现了用户登陆程序项目的...
它旨在提供一个全面、深入的学习和研究工具,适用于本科课程设计、毕业设计以及任何希望深入学习Java编程的学习者。 详细内容: 源代码——提供了一套完整、经过良好注释的Java源代码,实现了留言管理程序项目的...
本笔记是搭配《推荐系统实践》一书来阅读。 本笔记将书中大部分的代码都实现了一遍,包括很多书中的数据可视化的图。 相关资料下载地址: 链接: : 提取码:pqf4 注: 在pycharm下,需要将src目录设置成Sources ...
通过阅读和实践该系统源代码,将掌握Web应用程序开发技能,了解前后端交互方式。 适用人群: 该项目适合具有一定编程基础、对技术有浓厚兴趣的开发者,以及大学生作为学习参考的实践项目。主流技术栈,对编程和Web...
本论文介绍了一种基于Spring Boot和Vue.js的Web应用程序开发框架,旨在提供一个通用的管理系统模板。通过系统的需求分析、概要设计、详细设计和测试等阶段,可以全面了解该框架的设计思路和实现细节,掌握相关的开发...
读书笔记:《数据库系统概念》 读书笔记:《数据库系统概念》 ⽬录 第 第 1 章 章 引⾔ 引⾔ 数据库管理系统(DataBase-Management System,DBMS)由⼀个互相关联的数据的集合和⼀组⽤以访问这些数据的程序组成。...
在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,...
软件特征:只有程序、程序设计概念,不重视程序设计方法。 ② 程序系统阶段。 硬件特征:速度、容量及工作可靠性有明显提高,价格降低,销售有爆炸性增长 。 软件特征:程序员数量猛增,开发人员素质低。 ...
高性能HTML5 (美)布莱恩特 等 《高性能HTML5》为读者讲解了如何用HTML5 从一开始就设计一个高性能的网站,以及如何对已有网站进行改良,使得它们具备优越的性能。《高性能HTML5》中总结了许多实践经验、关键技巧...
Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。 本教程将介绍Python入门基础教程,包括Python的基本概念、语法规则和常用功能等。无论是初学者还是有经验的开发者,都能从中受益。同时,本教程还...
JavaScript高级程序设计(第三版) You don't know JS 系列 ES6 标准入门 Node.JS深入浅出 图解HTTP HTTP权威指南 Head First Java CSS3揭秘 Linux Command Line 大型网站技术架构核心原理与案例分析 锋利的jQuery ...
内容摘要 Python是一种解释型、面向对象、动态数据类型的高级程序设计语言,自20世纪90年代初诞生至今,逐渐被广泛应用于处理系统管理任务和Web编程。本书用通俗易懂的语言结合常见任务、屏幕图和详细的解释,循序...
强类型设计实践 通过反射调用類的方法,屬性,字段,索引器(2種方法) ASP.NET: State Server Gems 完整的动态加载/卸载程序集的解决方案 从NUnit中理解.NET自定义属性的应用(转载) 如何在.NET中实现脚本引擎 (CodeDom...
阅读建议:此资源以开发简单手势识别学习图像处理和卷积神经网络的原理和内核,不仅是代码编写实现也更考验读者的代码调试能力,所以在学习的过程要结合这些内容一起来实践,并调试对应的代码。