顺序查找和二分查找算法多种编程语言实现

news/2024/11/27 21:42:40/

顺序查找和二分查找算法多种编程语言实现

查找,也可称检索,是在多个信息中寻找一个特定的信息元素,在此介绍顺序查找和二分查找算法的多种代码实现。

顺序查找

顺序查找也称为线形查找,属于无序查找算法。

顺序查找适合于存储结构为顺序存储或链接存储的线性表。

基本思想:从数据结构线形表的一端开始,顺序扫描,依次将扫描到的元素与查找关键字(给定查找值)相比较,若相等则表示查找成功;若扫描结束仍没有找到等于k的元素,表示查找失败。

假设要在10,34,86,8,15,56,45,67中,顺序找56和20

查找成功输出其位置下标,查找失败输出-1

C++代码

#include <iostream>
using namespace std;/**
* 线性查找算法
* @param arr   查找的数组
* @param target    查找的元素
* return  返回所在位置的下标
*/
int seqSearch(int *arr,int target){for (int i = 0; i < sizeof(arr); i++) {if (arr[i] == target){return i;}}return -1;  //返回-1表示没找到
}
int main(){int arr[] = {10,34,86,8,15,56,45,67};cout << seqSearch(arr, 56) << endl;cout << seqSearch(arr, 20) << endl;return 0;    
}

Java代码

public class SeqSearch {public static void main(String[] args) {int[] arr = {10,34,86,8,15,56,45,67};System.out.println(seqSearch(arr, 56));System.out.println(seqSearch(arr, 20));}/*** 线性查找算法* @param arr   查找的数组* @param target    查找的元素* return  返回所在位置的下标*/public static int seqSearch(int[] arr,int target){for (int i = 0; i < arr.length; i++) {if (arr[i] == target){return i;}}//返回-1表示没找到return -1;}
}

Python代码

# 线性查找算法
# @param data   查找的列表数组
# @param key    查找的元素
# return  返回所在位置的下标
def linear_search(data,key):lens = len(data)for i in range(lens):if data[i] == key:return i   # 找到返归下标return -1  # 未找到返归-1values = [10,34,86,8,15,56,45,67] #数据列表
print(linear_search(values,56))
print(linear_search(values,20))

二分查找(Binary Search

二分查找(Binary Search)算法,也叫折半查找算法,元素必须是有序的,如果是无序的则要先进行排序操作。

基本思想:元素必须是有序的,假设表中元素是按升序排列,将表中间位置元素与查找关键字(给定查找值)比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置元素大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到查找到或至结束没发现这样的元素。

假设要在10, 20, 30, 40, 50, 60, 70中,二分查找60和90

查找成功输出其位置下标,查找失败输出-1

C++代码

#include <iostream>
using namespace std;
/**
* 二分法查找算法
* @param Arr   查找的数组
* @param low    低端元素下标 
* @param high    高低端元素下标 
* @param k    查找的元素
* return  返回所在位置的下标
*/ 
int SearchK(int *Arr,int low,int high,int k)
{ int mid;  //记录中间位置 while (low<high){mid = (low + high) / 2; if (Arr[mid] ==k)return mid + 1;		else {if (Arr[mid] < k)//右边查找	low = mid + 1;		elsehigh = mid - 1;	}} return -1;//没找到返回-1 
}int main()
{int p[] = { 10, 20, 30, 40, 50, 60, 70 };cout<<SearchK(p, 0, 6, 60)<<endl;cout << SearchK(p, 0, 6, 90)<<endl;return 0;
}

Java代码

public class BinarySearch {public static void main(String[] args) {int[] p = { 10, 20, 30, 40, 50, 60, 70 };System.out.println(SearchK(p, 0, 6, 60));System.out.println(SearchK(p, 0, 6, 90));}/**
* 二分法查找算法* @param Arr   查找的数组* @param low    低端元素下标 * @param high    高低端元素下标 * @param k    查找的元素* return  返回所在位置的下标*/public static int SearchK(int[] Arr,int low,int high,int k){int mid;  //记录中间位置 while (low<high){mid = (low + high) / 2; if (Arr[mid] ==k)return mid + 1;		else {if (Arr[mid] < k)//右边查找	low = mid + 1;		elsehigh = mid - 1;	}} return -1;//没找到返回-1 }
}

Python代码

# 二分法查找算法
# @param Arr   查找的数组
# @param low    低端元素下标 
# @param high    高低端元素下标 
# @param k    查找的元素
# return  返回所在位置的下标
def SearchK(Arr,low,high,k):while low<high:mid = (low + high) // 2if Arr[mid] ==k:return mid + 1else:if Arr[mid] < k: #右边查找low = mid + 1else:high = mid - 1return -1 #没找到返回-1p = [ 10, 20, 30, 40, 50, 60, 70 ]  #数据列表
print(SearchK(p, 0, 6, 60))
print(SearchK(p, 0, 6, 90))


http://www.ppmy.cn/news/10960.html

相关文章

你是真的“C”——深度提炼分支与循环语句的“精髓”

深度提炼分支与循环语句goto语句的“精髓”&#x1f60e;前言&#x1f64c;一、分支与循环语句具体是什么&#xff1f;&#x1f64c;1、分支语句&#x1f64c;if语句中的精髓&#x1f60d;switch语句中的精髓&#x1f60d;2、循环语句&#x1f64c;while循环语句中的精髓&#…

[ 数据结构 ] 弗洛伊德算法(Floyd)--------最短路径问题

0 Floyd算法介绍 和 Dijkstra 算法一样&#xff0c;弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法。该算法名称以创始人之一、1978 年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特弗洛伊德命名弗洛伊德算法(Floyd)计算图中各个顶点之间的最短路…

C#编程遇到的问题合集(2023.1.9)

文章目录1.Partial类2.MessageBox的用法3.Static类和Static变量4.SubString函数用法5.读取指定文件内容的一般格式6.二进制字符串转换为十进制数字7.给窗口添加任务栏图标8.给窗口设置最大化和最小化按钮1.Partial类 Partial类的意思是定义一个类的一部分。也就是说&#xff0…

异步path怎么约?

异步path怎么约? 在design里往往会有一些特殊需求,例如约束两个异步clock之间的path,而异步path对于工具来说往往是不做任何约束的,那么我们应该怎么去对异步clock之间的path做约束呢? 异步clock 异步clock可以通过两个办法来约束: 1、set_clock_group 2、set_false_p…

汤姆斯的天堂梦(C++,Dijkstra)

题目描述 汤姆斯生活在一个等级为 000 的星球上。那里的环境极其恶劣&#xff0c;每天 121212 小时的工作和成堆的垃圾让人忍无可忍。他向往着等级为 NNN 的星球上天堂般的生活。 有一些航班将人从低等级的星球送上高一级的星球&#xff0c;有时需要向驾驶员支付一定金额的费…

EEG论文阅读和分析:《Differential entropy feature for EEG-based emotion classification》

论文阅读《Differential entropy feature for EEG-based emotion classification》 论文的核心是提出差分熵作为特征&#xff0c;并且对差分差分熵和比例差分熵等特征进行对比研究。 算法流程步骤&#xff1a; 采样过程&#xff1a; A.预处理 根据受试者的压力反应&#xf…

指针详解——高级指针的解析及应用

目录 &#x1f411;指针的初步了解 &#x1f402;指针的深入认识 &#x1f99b;1.指针数组 &#x1f400;指针数组的介绍 &#x1f400;指针数组的用法介绍 &#x1f42b;2.数组指针 &#x1f98c;数组指针的介绍以及使用 &#x1f9ae;3.函数指针 &#x1f408;函数指针的介绍…

【数据结构与算法】——第六章:图

文章目录1、图的定义1.1 图的其他定义1.2 图的顶点与边之间的关系1.3 连通图相关术语2、图的存储结构2.1 邻接矩阵2.2 邻接表3、图的遍历3.1 深度优先遍历3.2 广度优先遍历4、最小生成树4.1 普利姆算法(Prim)4.2 克鲁斯卡尔(kruskal)5、最短路径5.1 迪杰斯特拉(Dijkstra)算法5.…