算法学习(01)

1、排序算法

1)快速排序
public void qsout(int[] arr,int l,int r){if(l >= r)return;int i,j,temp,t;i = l;j = r;temp = arr[l];while(i != j){while(arr[j] >= temp && i < j) j--;while(arr[i] <= temp && i < j) i++;if(i < j){t = arr[i];arr[i] = arr[j];arr[j] = t;}}arr[l] = arr[i];arr[i] = temp;qsort(arr,l,i-1);qsout(arr,i+1,r);
}
2)归并排序
- 正常归并排序
public void merge_sort(int[] arr,int l,int r,int[] temp){  //这里的temp数组是与原数组的长度一样的空数组if(l >= r)return;int mid = l + r >> 1;merge_sort(arr,l,mid,temp);merge_sort(arr,mid+1,r,temp);int i = l,j = mid+1,k = 0;while(i <= mid && j <= r){if(a[i] <= a[j]) temp[k++] = a[i++];else temp[k++] = a[j++];}while(i <= mid) temp[k++] = a[i++];while(j <= r) temp[k++] = a[j++];for(i = l,j=0;i <= r;i++,j++) a[i] = temp[j];
}
- 利用归并排序的特点求逆序对
//求逆序对public void merge_sort(int[] a,int l,int r,int[] temp){if(l >= r)return;int mid = l + r >> 1;merge_sort(a,l,mid,temp);merge_sort(a,mid+1,r,temp);int k = 0,i = l,j = mid + 1;  //两个指针,和一个k用于储存结果while(i <= mid && j <= r){if(a[i] <= a[j])temp[k ++] = a[i ++];else {//体现分治思想//就是:当进入这个条件时,说明,右侧的 < 左侧,符合逆序的条件 因此,右侧的这个数,与左侧剩余数构成逆序数对//经验:分析分治时,直接用随机的数据来判断//eg: 1 2 3  5 6 78 9  与 4 67 879 889 999count += mid - i + 1;temp[k++] = a[j++];}}while(i <= mid)temp[k ++] = a[i ++];while(j <= r)temp[k ++] = a[j ++];for(i = l,j = 0;i <= r;i++,j++)a[i] = temp[j];}

2、查找算法

1)二分查找
- 简单二分查找
public int findIndex(int[] arr,int x){int l = 0,r = arr.length-1;while(l < r){int mid = l + r >> 1;if(arr[mid] >= x) r = mid;else l = mid + 1;}return arr[r] == x ? r : -1;
}
2)二分查找第一个或最后一个出现的目标值
- 查找目标值出现的第一个位置
    //二分查找第一次出现的目标数字public static int FindF(int x,int[] a){if(a.length == 0)return -1;  //数组为空int l = 0,r = a.length-1;while(l < r){int mid = l + r >> 1;if(a[mid] > x)r = mid - 1;  //不包含左端点 因为将a[mid] = x 单独拉出来了,可以判断左端点(保证 r与l相等)else if(a[mid] == x)r = mid;elsel = mid + 1;}return a[l] == x ? l : -1;  //如果数组只有两个元素,则 r 与 l 不同,此时 r 是正确的值,r 是 -1,因此用 l//如果数组元素大于两个元素,则 l == r}
- 查找目标值出现的最后一个位置
   //二分查找最后一次出现的目标数字public static int FindL(int x,int[] a){if(a.length == 0)return -1;  //数组为空int l = 0,r = a.length-1;while(l < r){int mid = l + r + 1 >> 1;  //由于的当r=mid-1时,r与l的值不相等,因此在这里 + 1 保证l与r的值相等if(a[mid] > x)r = mid - 1;  //不包含左端点 因为将a[mid] = x 单独拉出来了,可以判断左端点(保证 r与l相等)else if(a[mid] == x)l = mid;elsel = mid + 1;}return a[r] == x ? r : -1;  //如果数组只有两个元素,则 r 与 l 不同,此时 r 是正确的值,l 是 -1,因此用 r//如果数组元素大于两个元素,则 l == r}
- 查找出现的峰值
public static int FindMax(int[] a){  //查的是其中一个最大值 1,2,1 是 2 的索引 ,1,2,3 是 3 的索引int l = 0, r = a.length-1;while(l < r){int mid = l + r >> 1;if(a[mid] > a[mid + 1] && mid != 0 && a[mid] > a[mid - 1] )return mid;else if (a[mid] > a[mid + 1]) {r = mid;} else if (mid != 0 && a[mid] > a[mid - 1]) {l = mid+1;} else {r = mid;}}if(a.length == 1)return 0;if(a[0] > a[1])return 0;return a.length-1;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/21386.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日一练——分糖果

575. 分糖果 - 力扣&#xff08;LeetCode&#xff09; 方法一 可以做&#xff0c;但提示超时了 #define MIN(x, y) (x < y ? x : y)int distributeCandies(int* candyType, int candyTypeSize) {int p 0;char flag 1;for (int i 1; i < candyTypeSize; i){for (int…

TypeScript 模块解析机制

1. 模块解析的概念 模块解析是指编译器在编译过程中根据模块的导入语句找到并加载相应的模块文件的过程。在 TypeScript 中&#xff0c;模块可以使用相对路径或者绝对路径来导入&#xff0c;编译器需要根据导入语句中的路径信息来定位到对应的模块文件。 2. 解析策略 TypeSc…

Java项目:94 springboot大学城水电管理系统

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本管理系统有管理员和用户。 本大学城水电管理系统管理员功能有个人中心&#xff0c;用户管理&#xff0c;领用设备管理&#xff0c;消耗设备…

pandas习题 035:选择 DataFrame 其中一列

# 有以下一个 DataFrame&#xff0c;请分别选择 name 列和 math 列&#xff0c;选择后为一个 Series&#xff0c;并查看这些 Series 的数据类型。 import pandas as pddata {name: [Alice, Bob, Charlie, David, Eve],grade: [10, 11, 10, 12, 11],math: [90, 85, 92, 88, 95]…

介绍计算机系统中的I/O设备工作方式

在现代计算机系统中&#xff0c;I/O设备&#xff08;Input/Output Devices&#xff09;扮演着至关重要的角色&#xff0c;它们负责在计算机和外部环境之间进行数据交换。本文将详细介绍I/O设备的种类、连接方式及其工作原理&#xff0c;并解释GPU如何进行并行计算&#xff0c;以…

Lambda 表达式练习

目录 sorted() 四种排序 List 转 Map map 映射 对象中 String 类型属性为空的字段赋值为 null BiConsumer,> T reduce(T identity, BinaryOperator accumulator) allMatch(Predicate p) groupingBy(Function f) flatMap(Function f) Optional.ofNullable(T t) 和 …

基于51单片机的俄罗斯方块

一.硬件方案 本设计采用STC89C52RC单片机作为系统的芯片&#xff0c;实现人机交互、娱乐等功能。选用LCD12864实现俄罗斯方块游戏界面、图形显示&#xff1b;选用独立按键实现游戏控制。本设计实现的基本功能是&#xff1a;用按键控制目标方块的变换与移动&#xff1b;消除一行…

OpenCASCADE开发指南<十四>:OCCT建模类之BRepPrimAPI_MakePipe创建管道

1、OpenCasCade拓扑几何 在Open CASCADE Technology (OCCT) 中,除了基本三维几何体建模类BRepBuilderAPI外,还提供了复杂模型的建模类,常用的有如下几种,他们可以单独使用或相互组合,通过OCCT提供的融合函数进行组装。例如:BRepOffsetAPI_ThruSections、BRepOffsetAPI_Ma…

TalkingData数据统计:洞察数字世界的关键工具

TalkingData数据统计&#xff1a;洞察数字世界的关键工具 在数字化时代&#xff0c;数据已成为推动社会进步和商业决策的核心动力。TalkingData作为国内领先的移动数据服务平台&#xff0c;为众多企业提供了全面、精准的数据统计服务。本文将深入探讨TalkingData数据统计的应用…

Jenkins - Parallel 并行执行

Jenkins - Parallel 并行执行 引言Jenkins Parallel 基本用法Jenkins Prallel 启动多个其他 JobJenkins Parallel Retry 引言 日常执行测试用例&#xff0c;为了缩减执行时间&#xff0c;提高工作效率&#xff0c;可以从以下两个方面进行改进。 代码层面&#xff1a;用多进程…

15 试用期,转正时我们要考察什么?

上一讲&#xff0c;我点出了“找人并不等于盲目加人”&#xff0c;你既要明确业务现状与团队需求&#xff0c;更要做好面试甄别&#xff0c;做出最优决定。那么当你找到人之后&#xff0c;是不是就可以高枕无忧了呢&#xff1f;并不是。 因为最终目的并非招聘&#xff0c;而是…

基于安卓的虫害识别软件设计--(2)模型性能可视化|混淆矩阵、热力图

1.混淆矩阵&#xff08;Confusion Matrix&#xff09; 1.1基础理论 &#xff08;1&#xff09;在机器学习、深度学习领域中&#xff0c;混淆矩阵常用于监督学习&#xff0c;匹配矩阵常用于无监督学习。主要用来比较分类结果和实际预测值。 &#xff08;2&#xff09;图中表达…

FPGA代码移植案例分析:Tcl Scripts后提示找不到 vo 文件,Supra软件报错

FPGA代码移植案例分析&#xff1a;Tcl Scripts后提示找不到 vo 文件&#xff0c;Supra软件报错 客户工程师已经运行Tcl Scripts&#xff0c;正常没出错就会产生这个vo文件。工程师试了两次 运行之后点的next的&#xff0c;还是出现同样的错误。 建议客户在原quartus工程里重新…

LabVIEW如何确保步进电机的长期稳定运行

步进电机因其良好的定位精度和控制性&#xff0c;在自动化设备中得到了广泛应用。然而&#xff0c;长期稳定运行对于任何电机系统都是一个重要的挑战。LabVIEW作为一款强大的图形化编程语言&#xff0c;通过其灵活的控制算法和实时监控能力&#xff0c;为步进电机的稳定运行提供…

探索 Vue Devtools 4.0 的新世界!

大家好&#xff0c;我是前端宝哥。Vue Devtools 4.0 版本带来了一系列激动人心的新特性和改进&#xff0c;让我们一起来探索这些更新亮点&#xff01; 宝哥省流版&#xff1a; &#x1f6e0; 直接编辑组件数据&#xff0c;实时预览变更效果。⚙️ 快速编辑功能&#xff0c;一键…

Python 基于机器学习模型的车牌检测和识别系统 有GUI界面 【含Python源码 MX_004期】

一、系统介绍 车牌的检测和识别技术在现代社会中的应用场景可谓十分广泛&#xff0c;不仅涉及交通管理领域&#xff0c;还延伸至社区安保等多个方面。例如&#xff0c;在交通违章管理中&#xff0c;通过车牌追踪可以有效追踪违章车辆&#xff0c;维护交通秩序&#xff1b;在小区…

如何高效管理团队任务?强大的在线管理团队多任务的神器-YesDev

任务是最小的工作项&#xff0c;工时是可以对研发产能进行量化。 一员工工时 工作组工时登记配置 针对于工作组&#xff0c;你可以开启/关闭工时登记。关闭工作组的工时登记后&#xff0c;整个工作组将取消工时登记&#xff0c;重新开启后恢复。 在同一个工作组内&#xff0c…

碰撞检测技术在AI中的重要作用

引言&#xff1a; 随着人工智能技术的不断发展&#xff0c;AI已经渗透到我们生活的方方面面。在游戏、机器人、虚拟现实等领域中&#xff0c;碰撞检测技术扮演着至关重要的角色。本文将探讨碰撞检测技术在AI中的作用&#xff0c;以及如何利用这项技术来改善AI系统的性能和用户体…

6,串口编程———通过串口助手发送数据,控制led亮灭

//功能&#xff1a;串口助手每次发送数据格式&#xff1a;0000& // 第二个字节控制LED1亮灭 // 第三个字节控制LED2亮灭 // 第四个字节控制LED3亮灭 // 第无个字节控制LED4亮灭 //要求&#xff1a;代码能够一直运行&#xff0c;能够接收多字节数据 上节讲了串口的基本…

宁波财经学院程序设计补修单链表

2024年6月2日 #include <stdio.h> #include <stdlib.h> // 定义链表节点结构体 typedef struct Node { int data; struct Node* next; } Node; // 尾插函数 void append(Node** head_ref, int new_data) { // 1. 分配新节点&#xff0c;并设置其数据…