算法notes

2023-10-27

算法notes1

一 位运算

!!!本文重点讲解前移位(前三个)!!!

位运算规则:十进制 —> 二进制

符号位 正数为0,负数为1

1.无符号右移

符号位不变,低位溢出,高位用符号位(第一位都是0,无论正负)填充。没有无符号左移

2.左移(<<)

符号位不变,高位溢出,低位补零(正负都补零)。向左移动一位相当于乘以2

3.右移(>>)

符号位不变,低位溢出,高位用符号位(第一位正数为0,负数为1)填充。向右移动一位相当于除以2

4.位取非(~)

若位数为0,则取反后为1,若为1,取反后为0。

5.位异或(^)

两个数相同位置的进行运算,若两个数均为0或1,则结果为0,否者为1.

6.位或(|)

两个数相同位置的进行运算,若其中一个为1则结果为1,否个结果为0。

7.位与(&)

两个数相同位置的进行运算,若两个位置均为1,那么结果就为1,否者为0。

//上面的结论可以通过下面这个方法来过一遍,加深印象。
public static void print(int num) {
	for (int j = 31; j >= 0; j--) {
		System.out.print((num & (1<<j)) == 0? "0":"1");
	}
}

二 简单排序

1.选择排序

从0n-1,1n-1,2~n-1 … n-2~n-1,选择最小的依次放入0,1…n-2

对一个数组进行排序,

首先,从0~n-1中选择最小的放在第一个位,

然后,从1~n-1中选择最小的放在第二个位,

//选择排序
public static void easy(int[] arr) {
	for (int i = 0; i < arr.length; i++) {
		int minIndex = i;
		for (int j = i+1; j < arr.length; j++) {
			minIndex = arr[minIndex] < arr[j] ? minIndex:j;
		}
		swap(arr,i,minIndex);
	}
}

2.冒泡排序

它重复地走访过要排序的元素列,依次比较两个相邻的元素,

如果顺序错误就把他们交换过来。

走访元素的工作是重复地进行,直到没有相邻元素需要交换。

//冒泡排序一(根据自己所想写的)
public static void bubble(int[] arr) {
	for (int i = 0; i < arr.length-1; i++) {
		for (int j = i+1; j < arr.length; j++) {
			if (arr[i] > arr[j]) {
				swap(arr, i, j);
			}
		}
	}
}


//冒泡排序二
public static void bubble(int[] arr) {
	int N = arr.length;
	for (int i = N-1; i >= 0; i--) {
        // 注释 01  12  23  34 ... (i-1) i
		for (int j = 1; j <= i; j++) {
			if (arr[j] < arr[j-1]) {
				swap(arr, j, j-1);
			}
		}
	}
}

3.插入排序

在一个数组中,将未排序的数与已经排序好的数进行比较,

如果顺序错误就把他们交换过来。其他未排序的执行相同操作。

//插入排序一
public static void insert(int[] arr) {
	for (int i = 1; i < arr.length; i++) {
		int minIndex = i;
		while (minIndex - 1 >= 0 && arr[minIndex - 1] > arr[minIndex]) {
			swap(arr, minIndex-1, minIndex);
			minIndex--;
		}
	}
}

//插入排序二
public static void insert(int[] arr) {
	for (int i = 1; i < arr.length; i++) {
		for (int pre = i - 1; pre >= 0 && arr[pre] > arr[pre+1]; pre--) {
			swap(arr, pre, pre+1);
		}
	}
}

作者是算法小白,此笔记主要是通过看左神算法视频新手入门视频的个人总结,希望此内容能够帮助到大家,同时也欢迎大家评论和指正。如果对你有所帮助的话可以点赞鼓励一下!!!感谢~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

算法notes 的相关文章

随机推荐

  • 接口测试的基础(网络传输知识与协议篇)

    接口测试的基础 测试人员对于接口测试的理解总是停留在工具使用层面 很多情况下 测试人员会花很大的 代价去学习一个工具 而测试工具本身的局限性 又导致测试人员陷入想直接用现成的测试框架 却又无法进行扩展的僵局 最后由于项目的特殊性等客观因素
  • ping命令中ICMP协议包的分析

    UDP收发以及所需要的ARP协议已经全部实现 接下来让咱们的协议栈支持ping 俗称能ping通 ping的请求和发送实际是ICMP协议的一个子集 ICMP可以参考ICMP数据包结构 Focus 新浪博客 在IP头中ICMP协议的标识是01
  • springboot项目读取 resource下面的json文件,并且解析

    在Spring Boot项目中 如果要读取src main resources目录下的JSON文件 可以使用ResourceLoader来加载文件 并使用Jackson库将JSON文件解析成Java对象 以下是一个简单的示例代码 impor
  • Type-C协议简介(CC检测原理)

    1 简介 越来越多的手机开始采用Type C作为充电和通信端口 Type C连接器实物和PIN定义如下图 目录 1 简介 Type C连接器中有两个管脚CC1和CC2 他们用于识别连接器的插入方向 以及不同的插入设备 本文介绍CC的基本识别
  • Bootrom概述

    1 Bootrom 是指on chip bootrom 在CPU芯片内部 内嵌有小的boot程序 bootloader 类似于PC机主板上的BIOS的存储区域 2 Bootloader怎么得到 如果对开发板有些改动 还能使用开发板的boot
  • solidity学习过程---msg

    solidity 5 0 remix测试 个人学习 欢迎指正 msg 研究了好一会 感觉还是有点困惑 msg sender 当前合约的调用者 1 部署合约的地址 2 调用该合约的地址 msg value 随消息发送的 wei 的数量 其实并
  • 【Spark NLP】第 15 章:聊天机器人

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • sonarQube详细安装

    目录 安装前提 将zip包scp到服务器 解压sonar的zip包 修改配置 创建用户sonar 将sonar目录授权给sonar用户 执行命令 查看日志 遇到的问题 今天学习了一下sonar 想看看代码质量检查工具的使用 安装前提 需要j
  • python笔记9--socket初步使用

    python笔记9 socket初步使用 1 介绍 2 源码案例 2 1 tcp c s 案例 2 2 udp c s 案例 3 说明 最近需要写个c s小应用 因此看了下socket编程 把学习的笔记贴在此处以便于后续查阅 1 介绍 本文
  • Mysql服务的安装

    本文适用于新手 小白 而且专业术语不到位 本文内容可能无法解决教程外其他问题 望多包涵 多图警告 此教程适用于windows系统 教程流程 安装时 1 下载安装包 这个是下载链接 MySQLhttps www mysql com 打开界面后
  • ubuntu连接mysql命令_远程服务器 ubuntu 安装 mysql 及连接使用

    远程服务器 ubuntu 安装 mysql 及连接使用 MySQL是最流行的开源关系数据库管理系统 它速度快 容易使用 容易扩展 并且流行的LAMP和LEMP的一部分 这篇指南讲解了如何在 Ubuntu 20 04上安装和保护 MySQL
  • SQL 取数值小数后两位,但不四舍五入。

    例 1 67789 结果要显示为 1 67 select round 1 67789 2 1 1 67 语法 ROUND numeric expression length function 参数 numeric expression 精确
  • k8s滚动更新

    1 编写一个yaml文件 vi deployment nginx yaml apiVersion apps v1 kind Deployment metadata labels app nginx name nginx namespace
  • 22.MongoDB删除操作效率及相关问题验证

    最近遇到一个了一个MongoDB数据删除的问题 需要一次性删除上线即1 5年前 1年前的数据且之后每天清空一年过期的数据 在数据量比较大的情况下何种方式的删除效率最高是一个值得研究的问题 本文通过实际测试找出其中规律 本文采用腾讯云mong
  • PCL实现点云选取并计算选取点法向量及可视化

    1 背景及效果展示 因项目需求 基于PCL1 8 1 VS2015 实现点云特征点选取并计算选取的特点法向量 并对特征点选取过程可视化 法向量计算结果可视化 特此记录该小功能实现 随机选取几个特征点 计算选取特征点法线并可视化 2 实现步骤
  • 使用burp suite软件后开启代理后不能上网

    这篇一定要记录一下 不然忘记了太恶心了 转载网址 https blog csdn net weixin 45571987 article details 110411138
  • Shell万能工具箱脚本

    文章目录 说明 说明 使用步骤 万能工具箱 脚本结构 万能工具箱 执行效果 说明 说明 持续更新 整合业务中常用的脚本并分类触发 所有功能均基于运维企业实战Shell脚本合集 使用步骤 1 shell tools sh存放到 root sc
  • pidstat 命令详解

    pidstat 概述 pidstat是sysstat工具的一个命令 用于监控全部或指定进程的cpu 内存 线程 设备IO等系统资源的占用情况 pidstat首次运行时显示自系统启动开始的各项统计信息 之后运行pidstat将显示自上次运行该
  • python 绘制分组对比柱状图

    首先放效果图 coding utf 8 import numpy as np import tensorflow as tf from matplotlib path import Path from matplotlib patches
  • 算法notes

    算法notes1 一 位运算 本文重点讲解前移位 前三个 位运算规则 十进制 gt 二进制 符号位 正数为0 负数为1 1 无符号右移 符号位不变 低位溢出 高位用符号位 第一位都是0 无论正负 填充 没有无符号左移 2 左移 lt lt