自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 【C语言】【高级数据结构与算法】 优先队列

优先队列(Priority Queue)是一种抽象数据类型,类似于普通的队列或栈,但它不是遵循先进先出(FIFO)或后进先出(LIFO)的原则,而是根据元素的优先级进行排序。每次从优先队列中移除元素时,总是移除具有最高优先级的元素。

2024-10-28 13:13:31 1344 2

原创 【C语言】【十大排序算法】桶排序

当输入数据均匀分布在桶中时,排序效率非常高,时间复杂度接近O(n),其中n是数组长度。然而,如果数据分布极不均匀,桶排序的效率会大大降低,最坏情况下的时间复杂度接近O(n^2),特别是当所有元素都落在同一个桶中时。将元素分布到多个桶中,每个桶内部使用其他排序算法(如插入排序)进行排序,最后将所有桶中的元素合并成一个有序列表。桶排序适用于数据分布均匀的情况,特别适合处理浮点数和小范围整数的排序。桶划分越多,每个桶里面的数据越少,排序时间越短,但相应地占用空间越大。适用于大量数据的排序,尤其是浮点数的排序。

2024-10-11 14:53:31 599

原创 【C语言】【十大排序算法】基数排序

是一种非比较型的排序算法,最早用于解决卡片排序的问题。基数排序将待排序的元素拆分为k个关键字,逐一对各个关键字排序后完成对所有元素的排序。如果是从第1关键字到第k关键字顺序进行比较,则该基数排序称为MSD(Most Significant Digit first)基数排序;如果是从第k关键字到第1关键字顺序进行比较,则该基数排序称为LSD(Least Significant Digit first)基数排序。

2024-08-21 00:16:02 726

原创 【C语言】【十大排序算法】计数排序

比如对一个班的学生成绩进行倒着排序:1、找到最高分96分,找到最低分11分2、申请一个数组,数组大小为96-11=85,将11~96都填充到该数组中,并在该表格(临时数组)中统计每个分数出现的次数,比如27分出现的次数为0,那么在此表格中记录它的次数为0,如果有2个同学考了58分,则记录出现的次数为2。3、再找到每个分数比它自己低的分数的个数。比如11分为最低分,比11分低的分数个数为0。

2024-08-16 03:24:40 396

原创 【C语言】【十大排序算法】归并排序

如何使用归并排序算法对一个乱序数组进行排序呢?先拆分,再合并!1、拆!将数组使用递归方式进行一分为二地拆分,直到拆到不能拆为止。2、合!将拆分后的数组,每个元素都可以看做有序数组。将其逐步合并。

2024-08-14 14:54:35 199

原创 【C语言】【十大排序算法】快速排序

2、遍历数组,将比基数大的数字放在其右,比基数小的放在其左。遍历完成后,数组将被分为左右2个区域。2、将左右两个区域视为2个数组,重复之前步骤,直到排序完成。1、从数组中取出一个数,称为基数(pivot)

2024-08-13 14:47:17 213

原创 【C语言】【十大排序算法】堆排序

在学习堆排序前先温习下一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。完全二叉树具有如下性质:将根节点的下标视为0 ,则 第i个数 的左子节点的下标为2i+1,右子节点的下标为2i+2;

2024-08-13 01:23:37 949

原创 【C语言】【十大排序算法】冒泡排序

十大排序算法之冒泡排序

2024-08-09 00:32:46 181

原创 【C语言】【十大排序算法】希尔排序

十大排序算法之希尔排序

2024-08-09 00:28:55 1106 1

原创 【C语言】【十大排序算法】插入排序

注意,对于乱序数组来说,从第0个元素单独来说是已经排好的,第1个序要和第0个序比较并插入合适位置,第二个元素要和前面的元素比较并插入到合适位置,依次类推,遍历到第n个元素时,前面的数组都是已经排好序的了。时间复杂度O(n^2).因为对于n个元素来说,for循环执行n轮,其中while循环也是执行n-i轮,就是n*(n-1)=O(n^2);思想是当前数与前一个数比较,当遇到比自己大的时候,就与之交换。空间复杂度O(1),因为只有一两个变量。

2024-08-08 18:54:20 135

原创 【C语言】【十大排序算法】选择排序 (与二元选择排序算法)

十大排序算法之选择排序

2024-08-08 12:09:32 216

原创 地址消毒器ASAN学习笔记

详细介绍见:https://github.com/google/sanitizers/wiki/AddressSanitizer。其中,malloc和free调用栈非常常见,如果你不在乎malloc/free,可以在ASAN_OPTIONS环境变量中使用。该工具由一个编译器插入模块(目前是一个LLVM传递)和一个取代malloc函数的运行时库组成。https://gcc.gnu.org/ (GCC,GNU编译器集合)https://llvm.org/ (LLVM编译器基础架构)编译选项进行编译即可。

2023-11-01 14:51:22 1072 1

原创 常见算法介绍 ---- 回溯算法介绍(C++描述)

【概念简介】 回溯算法(backtrackingalgorithm)实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。【基本思想】 从一条...

2021-11-01 03:10:26 431

原创 常见算法介绍 ---- 动态规划算法介绍(C++描述)

壹、【算法简介】动态规划法(Dynamic Programming Algorithm,简称DPA)类似于分治法,用于研究多阶段决策过程的优化过程与求得一个问题的最优解。关于分治法:分治法(Divide and Conquer)常用来逐一拆解复杂的问题,核心思想就是将一个难以直接解决的大问题依照相同的概念分割成两个或更多的子问题,以便各个击破。贰、【基本方法】动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个...

2021-10-31 20:59:54 523

原创 常见算法介绍 ---- 递归算法介绍(C++描述)

【必要的基础知识】 分治法(Divide and Conquer)常用来逐一拆解复杂的问题,核心思想就是将一个难以直接解决的大问题依照相同的概念分割成两个或更多的子问题,以便各个击破。【递归简介】 通过重复将问题分解为同类的子问题而解决问题的方法,具体指的是函数自己调用自己,从而使求解范围逐步缩小。【递归条件】1、 可以反复执行的递归过程2、跳出执行过程的出口【示例代码·壹】 使用递归算法计算10的阶乘。...

2021-10-31 20:45:46 381

原创 C++ Standard Library 之vector介绍

C++ Standard Library 之vector介绍 【简介】 C++标准库中的vector是表示数组的序列容器,大小可以改变。 vector是一种标准容器,它提供对任意顺序的单个元素的固定时间访问。 vector将元素赋值到内部的dynamic arry(动态数组)中,元素之间总是存在一定的顺序,所以vector是一个有序集合。支持随机访问,因此只要知道位置,你可以在常量时间内访问任何一个元素。vector提供随机访问迭代器,所以适用于任何STL算法。 ...

2021-10-30 23:27:11 381 2

原创 对一个整数进行因式分解

题目: 对一个整数进行因式分解: 【示例】1 输入: 99 输出: 99 = 3 x 3 x 11 【示例】2 输入: 556 输出: 556 = 2 x 2 x 139 【示例】3 输入: 149 输出: 149 = 149 (因为149是个素数/质数)

2021-10-15 03:44:02 3399

原创 在Linux下,没有$JAVA_HOME变量的时候找到java的安装路径的方法

在Linux下,没有$JAVA_HOME变量的时候找到java的安装路径的方法:0、没有JAVA_HOME变量:$ echo $JAVA_HOME$1、确认java是否已安装:$ java -versionopenjdk version "1.8.0_302"OpenJDK Runtime Environment (build 1.8.0_302-b08)OpenJDK 64-Bit Server VM (build 25.302-b08, mixed mode)2、使

2021-10-07 00:33:47 946

原创 搭建Linux java运行环境并在windows下使用VScode登录Linux进行远程调试

打开选择下载x64 Compressed Archive(X64位的压缩包)

2021-10-06 16:28:50 645 1

原创 C/C++学习笔记:一个数组中有两种数出现了奇数次,其他数都出现了偶数次,怎么找到这两个数

对于按位运算的基础知识,请参考我之前的文章:C/C++学习笔记:按位运算基本知识及用法介绍_碧波bibo的博客-优快云博客/*题目:一个数组中有两种数出现了奇数次,其他数都出现了偶数次,怎么找到这两个数*//* 常用算法之提取二进制中最右侧的1:例如 获取 二进制数 010010101000 中最右侧的1,即获得 000000001000解法:利用公式 a&(~a+1)即可 公式中的&和~都是按位运算符a= 010010101000~a= .

2021-08-23 23:58:21 790

原创 C/C++学习笔记:一个数组中有一种数出现了奇数次,其他数都出现了偶数次,怎么找到这一个数

对于按位运算的基础知识,请参考我之前的文章:C/C++学习笔记:按位运算基本知识及用法介绍_碧波bibo的博客-优快云博客/* 常用算法之 一个数组中有一种数出现了奇数次,其他数都出现了偶数次,怎么找到这一个数:例如 112222333344444444555 中5只出现了一次,则利用异或运算的规律,任何数对自己异或运算,结果均为0,即a ^ a = 0;因此可以通过将所有值进行异或运算,即可获得5为出现奇数次的那个数。*/#include <iostream>using

2021-08-23 23:54:58 1024 3

原创 C/C++学习笔记:选择排序算法

#include <iostream>#include <cstdlib>#include <ctime>using namespace std;int main(){ /* 生成随机数组:arry[10] */ int arry[10] = {}; cout << sizeof(arry)<<endl; int i; srand((unsigned)time(NULL)); /*.

2021-08-23 23:51:27 129

原创 C/C++学习笔记:冒泡排序算法

#include <iostream>using namespace std;int main(){ /* 生成随机数组:arry[N] */ int arry[20] = {}; cout << sizeof(arry)<<endl; int i; srand((unsigned)time(NULL)); /*根据当前时间设置“随机数种子”*/ cout << "随机生成的数组为:".

2021-08-23 23:50:10 114

原创 C/C++学习笔记:插入排序算法

#include <iostream>using namespace std;int main(){ /* 生成随机数组:arry[N] */ int arry[10] = {}; cout << sizeof(arry)<<endl; int i; srand((unsigned)time(NULL)); /*根据当前时间设置“随机数种子”*/ cout << "随机生成的数组为:" .

2021-08-23 23:48:32 110

原创 C/C++学习笔记:按位运算基本知识及用法介绍

/* 按位运算,见 C Primer Plus 中文第六版 第497页 补码的概念:在补码表示中,最高位为符号位,正数的符号位为0,负数为1补码的规定如下:对正数来说,最高位为0,其余各位代表数值本身(以二进制表示),如+42的补码为00101010。对负数而言,把该数绝对值的补码按位取反,然后对整个数加1,即得该数的补码。如-42的补码为11010110(00101010按位取反11010101+1即11010110)用补码来表示数,0的补码是单一的,都为00000000。(而在原码,.

2021-08-23 23:33:00 1189

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除