![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法学习笔记
披着虎皮的汤姆猫
这个作者很懒,什么都没留下…
展开
-
二分法边界问题
问题:二分法涉及很多的边界条件,逻辑简单,就是写不好。例如到底是while(left < right)还是while(left <= right),到底是right = middle呢,还是要right = middle - 1呢?这里弄不清楚主要是因为对区间的定义没有想清楚,这就是不变量。要在二分查找的过程中,保持不变量,这也就是循环不变量(感兴趣的可以查一查)。以下面的题为例子:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不...原创 2021-08-05 17:37:27 · 323 阅读 · 0 评论 -
奇偶校验只能发现奇数位错误
奇校验:使包含校验位在内的数据中为"1"的个数恒为奇数偶校验:使包含校验位在内的数据中为"1"的个数恒为偶数(包括0个)奇偶校验提供奇数个错误检测,无法检测偶数个错误,更无法识别错误信息位置奇数+奇数=偶数偶数+奇数=奇数奇数+偶数=奇数偶数+偶数=偶数不难发现,一个数加上一个奇数可以改变奇偶行,然而偶数不可以。所以,只有出现了奇数个错误,才会改变整个数据中的1的个数,而发生了偶数个错误,即使发生了也不能发现,因为奇偶校验不能随时通过观察1个数的变化来发现错误的,而是通过奇偶翻译 2021-07-01 08:56:48 · 7642 阅读 · 1 评论 -
C++课程设计订单信息管理系统
//===头文件的引用#include#include#include#include //程序状态码(宏定义常量用大写)#define MAXSIZE 100//线性表最大长度#define OK 1#define ERROR0 -3#define OVERFLOW -2using namespace std;typedef int status;//返回值状态//订单信息结构体struct Order{ string id;//编号 string...原创 2021-06-26 16:06:23 · 3451 阅读 · 0 评论 -
java希尔排序
介绍:希尔排序也是一种插入排序,它是简单插入排序经过改进后的一个高效版本,也称缩小增量排序基本思想:是把记录按下标的一定增量分组,对每组使用直接插入排序的算法排序。随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰好被分为一组,算法终止。图解:代码:(交换式)import java.util.Arrays;//交换式public class ShellSort { public static void main(String[] args) {原创 2021-02-21 20:23:55 · 101 阅读 · 0 评论 -
java归并排序
思想:归并排序是利用归并的思想实现的排序算法,该算法采用经典的分治策略(分治法将问题分成一些小的问题然后递归求解,而治的阶段则将分的阶段得到的各答案‘修补’在一起,即分而治之)。形象化:代码:import java.util.Arrays;public class MergetSort { public static void main(String[] args) { int arr[]={8,4,5,7,1,3,6,2}; int .原创 2021-02-20 22:59:37 · 122 阅读 · 0 评论 -
java插入排序
基本思想:每一步将一个待排序的数据插入到前面已经排好序的有序序列中,直到插完所有元素为止。代码:import java.util.Arrays;public class InsertSort { public static void main(String[] args) { int arr[] = {102, 25, 35, 24, 17}; System.out.println("原始数组"); System.out.printl原创 2021-02-19 22:57:36 · 48 阅读 · 0 评论 -
java选择排序
1、算法思想:选择排序,从头至尾扫描序列,找出最小的一个元素,和第一个元素交换,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列。例如:{55,27,25,44,22}初始:{55,27,25,44,22}第一次:先将数组中第一个55数作为一个整体,然后从{27,25,44,22}剩下的数中找出最小的 22,最后与55交换位置。 得到:{22,27,25,44,55}第二次:将数组中的第二个27数作为一个整体,将它之后的{25,44,55}这些数中找出最...原创 2021-02-19 22:51:22 · 70 阅读 · 0 评论 -
java冒泡排序
基本思想:对排序数列从前向后,依次比较相邻元素的值,逐渐将较大的值从前向后移动,移到尾部。如水底下的气泡一样逐渐向上冒注:因为排序过程仲,各元素不断接近自己位置,如果一次循环结束后没发生交换,就说明排列有序。因此要在排序过程仲设置一个标志flag判断元素是否进行过交换,从而提高效率。代码:import java.util.Arrays;public class BubbleSort { public static void main(String[] args) {原创 2021-02-19 22:38:28 · 58 阅读 · 0 评论 -
java二分查找(非递归)
条件:二分查找只适用于从有序的数列中查找数字或字符,将数组排序后在查找代码:public class erFenFeiDIGui { public static void main(String[] args) { int arr[]={1,8,59,520,1314}; int index=binarySearch(arr,1314); System.out.println(index); } public static..原创 2021-02-19 14:23:56 · 88 阅读 · 0 评论 -
java二分查找(递归)
思路分析:前提:有序数组1.首先确定该数组的中间数的下标mid=(left+right)/22.让需要查找的数finalnum和arr[mid]比较 2.1 finalnum>arr[mid],说明要查找的数在mid的右边,因此需要递归向右查找 2.2 finalnum<arr[mid],说明要查找的数在mid的左边,因此需要递归向左查找 2.3 finalnum=arr[mid],找到返回mid3.结束递归找到就结束递归...原创 2021-02-19 14:09:19 · 442 阅读 · 0 评论 -
java稀疏sparsearray数组
用途:编写的五子棋中,有存盘退出和续上盘的功能分析:因为该二维数组中很多默认的值是0,所以我们可以用稀疏数组来简化基本介绍:当一个数组中大部分元素为0,或者为同一个值的数组时,可以用稀疏数组来保存该数组稀疏数组处理方法:1.记录数组一共有几行几列,有多少个不同的值2.把具有不同值的元素的行列以及值记录在一个小规模的数组中,从而缩小程序的规模。二维数组转稀疏数组的思路:1.遍历原始的二维数组,得到有效数据(有些时候是不为0的数)的个数sum2.根据sum创建稀疏数组spar原创 2021-02-18 18:20:53 · 111 阅读 · 0 评论