近期工作需要,开始复习相关的检索排序算法。对常用的几个算法,自行进行了JavaScript实现:
最朴素的查询
/**
@data 目标元素所在的数组
@target 目标查询元素
@return 目标查询元素所在的下标
*/
function sequenceSearch(data,target){
var resultIndex=-1;
for(var i=0;i<data.length;i++){
if(target==data[i]){
resultIndex=i;
break;
}
}
return resultIndex;
}
注意,适合有序数组中的查找
/**
@data 目标元素所在的数组
@target 目标查询元素
@return 目标查询元素所在的下标
*/
function halfSearch(data,target){
var resultIndex=-1;
//将有序数组分为两部分,使用start,middle与end
var start=0,end=data.length,middle=-1;
while(start<end){
middle=Math.floor((start+end)/2);
if(target>data[middle]){
start=middle+1;
}else if(target<data[middle]){
end=middle-1;
}else{
resultIndex=middle;
break;
}
}
return resultIndex;
}
注意:核心是由前往后,在逐渐排好的前段部分逆向插入元素
/**
@data 目标排序数组
*/
function insertSort(data){
for(var i=1;i<data.length;i++){
var temp=data[i];
if(data[i-1]>temp){
//每次在已经排好序的部分进行插入
for(var j=i-1;j>=0;j--){
if(data[j]>temp){
//向后进行移位,以便当前目标元素可以插入
data[j+1]=data[j];
data[j]=temp;
}
}
}
}
}
注意:逐次将大数向后移,第i个元素需要比较n-i-1次,嵌套循环实现
/**
@data 目标排序数组
*/
function bubbleSort(data){
for(var i=0;i<data.length;i++){
//大数自动向数组大下标处移动
for(var j=0;j<data.length-i;j++){
if(data[j]>data[j+1]){
var temp=data[j+1];
data[j+1]=data[j];
data[j]=temp;
}
}
}
}
注意,使用分段,结合递归
/**
@data 目标排序数组
@start 分段开始
@end 分段结束
*/
function quickSort(data,start,end){
if(start<end){
var i=quickSortPartation(data,start,end);
//递归处理每一段
quickSort(data,start,i-1);
quickSort(data,i+1,end);
}
}
//进行一次快排
function quickSortPartation(data,start,end){
//定义第一个元素为快排标志位
var key=data[start];
while(start<end){
while(start<end && data[end]>=key){
end--;
}
//当小于标志位的元素向前置换
if(start<end){
data[start]=data[end];
start++;
}
while(start<end && data[start]<key){
start++;
}
if(start<end){
data[end]=data[start];
end--;
}
}
data[start]=key;
return start;
}
分享到:
相关推荐
动态表格检索排序的实现通常涉及以下几个关键步骤: 1. **数据加载**:首先,数据需要从服务器获取或存储在本地,可以是JSON格式或者其他适合的数据结构。这些数据会被转化为表格的行和列。 2. **表格渲染**:使用...
3. 排序算法:最常用的排序算法可能是冒泡排序、选择排序、插入排序,或者更高效的快速排序、归并排序等。对于大数据集,考虑性能,一般会选择时间复杂度较低的排序算法。在JavaScript中,`Array.prototype.sort()`...
在这个"从 0 到 1 学习 JavaScript 数据结构与算法"的压缩包中,我们可能会涵盖以下几个核心知识点: 1. **数组**:数组是最基础的数据结构,它允许存储一系列有序的元素,可以是任何类型。在JavaScript中,数组...
实现这样的样式,我们需要关注以下几个关键点: 1. **界面设计**:Google的搜索页面以简洁著称,通常只有一个搜索框和一个搜索按钮。这种设计旨在减少干扰,让用户专注于输入查询。我们可以使用HTML和CSS来创建类似...
信息检索是这个系统的核心功能,涉及到文本处理、查询分析和排序算法等多个方面。 1. 文本预处理:包括分词、去除停用词、词干提取等步骤,以减少噪声并提高检索效率。 2. 查询分析:对用户输入的查询进行解析和...
综上所述,JavaScript中的冒泡排序涉及的几个核心知识点包括:排序算法的基本原理、sort()方法的使用、手动编写冒泡排序逻辑、以及正则表达式在字符串操作中的应用。通过这些知识点的综合应用,我们可以实现对...
本研究旨在设计并实现一个基于Python的文献检索系统,以提升文献搜索的精确度和速度,帮助用户快速定位到所需文献,从而提高科研工作的效率。此外,该系统还引入了自动化测试,确保其稳定性和可靠性;采用数据爬取...
本文将深入探讨一个基于VGG16模型的信息检索系统,该系统专注于图像检索,尤其是实现“以图搜图”的功能。VGG16是一种深度学习模型,由英国牛津大学视觉几何组(Visual Geometry Group)开发,并在2014年的ImageNet...
本文详细介绍了几种常见的检索算法:顺序查找、最大最小值查找和自组织查询,并通过实例展示了它们的实现方法和技巧。 一、顺序查找法(Sequential Search) 顺序查找是最基本的查找方法之一,它的原理是逐个比较...
这需要在后端逻辑中实现高效的分页算法和灵活的排序机制。 4. **二次检索能力**:系统应支持基于已检索结果的进一步搜索,即所谓的“二次检索”。这一特性对于精确查找特定信息非常有用,但在传统的ASP框架下很难...
在JavaScript拼音搜索引擎的实现中,主要有以下几个关键知识点: 1. **拼音库**:为了进行拼音匹配,首先需要一个完整的汉字与拼音对应关系的库。这个库通常包含所有常用汉字的拼音,以便于将用户的输入拼音与...
JavaScript作为Web开发的主力语言,负责实现排序算法的逻辑。在这个项目中,开发者可能使用了数组方法如`sort()`,或者自定义函数来实现各种排序算法。JavaScript的异步处理能力使得程序在执行复杂计算时不会阻塞...
在给出的代码示例中,通过构造函数functionMap创建了一个“Map”对象,并为该对象定义了几个方法来模拟Map的行为,分别是put(增加键值对)、size(获取Map容器大小)、get(根据key获取value)、remove(根据key...
在"js代码-js 几个算法"这个主题中,我们将深入探讨JavaScript中的一些常见算法及其应用。 1. **排序算法** - 冒泡排序:通过重复遍历数组比较相邻元素并交换,直到没有任何一对数字需要交换,实现排序。 - 选择...
它会涵盖以下几个关键知识点: 1. **图像检索算法**:外观专利图像检索通常涉及到特征提取、匹配和相似度计算。可能采用了如SIFT(尺度不变特征转换)、SURF(加速稳健特征)或深度学习方法如CNN(卷积神经网络)来...
这使得插入和删除操作相对数组来说更高效,因为它们只需要改变几个链接,而不是移动大量元素。 2. 普通链式队列:在`queue-on-linked-list.js`中,队列的头部是入队操作的发生位置,尾部是出队操作的发生位置。当...
在实现这个功能时,通常会有以下几个关键步骤: 1. **拼音转换**:使用JavaScript或其他编程语言的库,将下拉列表中的每个选项文本转换为拼音。确保处理好多音字和特殊字符,如“的地得”等。 2. **首字母提取**:...
熟练掌握常见算法如冒泡排序、快速排序、二分查找等,能提高代码效率。数据结构则是存储和组织数据的方式,如数组、链表、栈、队列、树、图等,它们直接影响到算法的实现和性能。 接下来,软件工程原理是保证项目...
项目论文通常会涵盖以下几个方面: - **背景与意义**:阐述搜索引擎在信息时代的重要性,以及JSP技术的应用场景。 - **技术选型与设计**:详细解释选择JSP的原因,以及系统的设计架构和主要模块。 - **实现过程**:...