C++:十大排序
目录
时间复杂度分析
选择排序
引言
算法思想
动图展示
代码实现 (升序)
优化
代码实现
分析
冒泡排序
引言
算法思想
动图展示
代码实现
插入排序
引言
算法思想
动图展示
代码实现
计数排序
引言
算法思想
动图展示
代码实现
桶排序
引言
算法思想
动图展示
代码实现
基数排序
引言
算法思想
动图展示
代码实现
希尔排序
引言
算法思想
动图展示
代码实现
快速排序
引言
算法思想
动图展示
动图分析
代码实现
堆排序
引言
大堆和小堆
算法思想
动图展示
代码实现
归并排序
引言
算法思想
动图展示
代码展示
时间复杂度分析
选择排序
引言
选择排序(Selection Sort)是一种简单直观的排序算法。他首先在未排序的序列中找到最小元素,存放到排序序列的起始位置,然后再找到剩下序列中最小的元素,放到排好序列的下一个位置。以此类推,直到所有元素排序完毕。
算法思想
第一步、在未排序的序列中找到最小(最大)的元素,存放到排序序列的起始位置。
第二步、再从剩余未排序元素中找到最小(最大)的元素,然后放到已排序的序列的末尾。
重复第二步,直到所有元素都排序完毕。
动图展示
代码实现 (升序)
void Select(int* a, int n)
{for (int i = 0; i < n - 1; i++)//排前n-1的数{for (int j = i + 1; j < n; j++){if (a[j] < a[i]){swap(a[i], a[j]);//未排序的序列中比目标小的就交换。}}}
}
优化
上述代码在未排序的序列中找最小(最大)的元素,每一轮只能找到一个,还可以将其进行优化,一轮中可以同时找到最小和最大的元素,分别将其交换到未排序序列的头部和尾部.
代码实现
//选择排序
void chosesort(int* a, int n)
{int begin = 0; int end = n - 1;int mini = begin;int maxi = begin;while (begin < end){maxi = begin; mini = begin;for (int i = begin + 1; i <=end; i++){if (a[i] > a[maxi])maxi = i;if (a[i] < a[mini])mini = i;}if (begin ==maxi && end ==mini)swap(a[begin], a[end]);else{swap(a[begin], a[mini]);swap(a[end], a[maxi]);}begin++; end--;}
}
分析
将未排序的序列的两端使用下标begin,end表示出来,注意我们找未排序序列中的最大值和最小值的时候找的是其下标并不是值,找到后将最大值(下标为maxi)和下标为end的值进行交换,将最小值(下标为mini)和下标为begin的值进行交换。
如果最大值恰好在begin位置,最小值恰好在end位置那么就只需要交换一次就可以了、
冒泡排序
引言
冒泡排序(Bubble Sort)是一种简单的排序算法,同过多次比较和交换相邻的元素,将数组中的元素按升序或降序排序。
算法思想
冒泡排序的基本思想是:每次遍历数组,比较相邻的两个元素,如果他们的顺序错误,就将他们交换,直到数组的所有元素都被遍历过。
动图展示
代码实现
//冒泡排序
void bubllesort(int* a, int n)
{for (int i = 0; i < n - 1; i++){for (int j = 0; j < n - i - 1; j++){if (a[j] > a[j + 1])swap(a[j], a[j + 1]);}}
}
插入排序
引言
插入排序(Insertion Sort)是一种简单直观的排序算法,它的工作原理是通过构有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应的位置并插入,直到整个数组有序。
算法思想
第一步:从第一个元素开始,将其看做已排序部分.
第二步:取出下一个元素,与已排序的元素进行比较。
第三步:如果该元素小于已排序部分的最后一个元素,则将其插入到已排序的适当位置。
重复步骤二和三,知道整个数组都排好。
动图展示
代码实现
//插入排序void Insertsort(int* a, int n)
{for (int i = 1; i < n; i++){int j;int tmp = a[i];for (j = i - 1; j >= 0; j--){if (a[j] > tmp){a[j + 1] = a[j];}elsebreak;}a[j + 1] = tmp;}
}
计数排序
引言
计数排序(Counting Sort)是一种基于哈希的排序算法。它的基本思想是通过统计每个元素的出现次数,然后根据统计结果将元素一次放到排序后的序列中。这种算法使用与元素范围较小的情况,例如0到k之间。
算法思想
计数排序的核心是创建一个计数数组。用于记录没每个元素出现的次数、然后根据计数数组对原始数组进行排序。具体步骤如下:
第一步:初始化一个长度为最大元素加1的计数数组,所有元素初始化为0.
第二步:遍历数组,将每个元素的值作为索引,在计数师叔祖的对应位置加1。
第三步;将原数组清空。
第四步:遍历计数器数组,按照数组中元素的个数放回到原数组中。
动图展示
代码实现
int * countingSort1(int arr[],int count,int max) {int index = 0;int *tmpArr = (int *)malloc(max*sizeof(int));int *result = (int *)malloc(max*sizeof(int));for(int k = 0;k<max;k++) {tmpArr[k] = 0;}for (int i = 0; i<count; i++) {tmpArr[arr[i]]++;}for (int j = 0; j<max; j++) {while (tmpArr[j]) {result[index++] = j;tmpArr[j]--;}}free(tmpArr);tmpArr = NULL;return result;
}
桶排序
引言
桶排序(Bucket Sort)是一种基于计数的排序算法,工作原理是将数据分到有限数量的桶子里,然后将桶子在分别排序(有可能在使用别的排序算法或者是以递归方式继续使用桶排序进行排序)。
算法思想
第一步:设置固定的空桶。
第二步:把数据放到对应的桶中。
第三步:把每个不为空的桶中的数据进行排序。
第四步:拼接不为空的桶中的数据,得到结果。
动图展示
代码实现
void bucketsort(vector<int>& nums) {int n = nums.size();int mn = nums[0], mx = nums[0];for (int i = 1; i < n; i++) {mn = min(mn, nums[i]);mx = max(mx, nums[i]);}int size = (mx - mn) / n + 1; // size 至少要为1int cnt = (mx - mn) / size + 1; // 桶的个数至少要为1vector<vector<int>> buckets(cnt);for (int i = 0; i < n; i++) {int idx = (nums[i] - mn) / size;buckets[idx].push_back(nums[i]);}for (int i = 0; i < cnt; i++) {sort(buckets[i].begin(), buckets[i].end());}int index = 0;for (int i = 0; i < cnt; i++) {for (int j = 0; j < buckets[i].size(); j++) {nums[index++] = buckets[i][j];}}
}
基数排序
引言
基数排序(Radix Sort)是一种非比较型的排序算法,他根据数字的每一位来进行排序,通常用于整数排序,基数排序的基本思想就是通过对所有元素进行若干次“分配”和“收集”操作来实现排序。
算法思想
基数排序的算法思想可以概括为以下步骤:
第一步:获取待排序元素的最大值,并确定其位数。
第二步:从最低位开始,依次对所有的元素进行“分配”和“收集”操作。
第三步:在每一位上,根据该位置上的值将元素分配到相应的桶中。
第四步:在每个桶中的元素进行顺序收集,得到排序后的部分结果、
重复上述操作,直到所有所有位都排好。
动图展示
代码实现
int main()
{int a[] = { 1,6,4,12,32,16,10,89,100,120 };int b[10];int sum[256] = { 0 }, sum1[256] = { 0 }, sum2[256] = { 0 }, sum3[256] = { 0 };for (int i = 0; i <= 9; i++) {++sum[a[i] & 255];++sum1[(a[i] >> 8) & 255];++sum2[(a[i] >> 16 )& 255];++sum3[(a[i] >> 24) & 255];}for (int i = 1; i <= 255; i++){sum[i] += sum[i - 1];sum1[i] += sum[i - 1];sum2[i] += sum[i - 1];sum3[i] += sum[i - 1];}for (int i = 0; i <9; i++)b[--sum[a[i] & 255]] = a[i];for (int i = 9; i >= 0; i--)a[--sum1[(a[i] >> 8) & 255]] = b[i];for (int i = 9; i >= 0; i--)b[--sum2[(a[i] >> 16) & 255]] = a[i];for (int i = 9; i >= 0; i--)a[--sum3[(a[i] >> 24) & 255]] = b[i];for (int i = 0; i <= 9; i++)printf("a[%d]=%d\n", i, a[i]);getchar();return 0;}
希尔排序
引言
希尔排序(Shell Sort):是直接插入排序的一种优化,希尔排序通过基于直接插入排序间隔性的将非顺序序列的元素进行排序。需要进行多次排序,每次都更加的接近顺序,直到排好。
算法思想
首先创造变量gap作为将每隔gap个数分到一组中,将序列分为若干组,然后在每组中使用直接插入排序,同时每次使用完直接插入排序后都要减小gap的值(通常是gap/=2或者是gap=gap/3+1);直到最后gap为1,此时就是将一个十分接近顺序的序列进行插入排序,就排好啦。
动图展示
代码实现
void slove(int* a, int n)
{int gap = n;//通常将gap初始化为数组的长度while (gap > 1)//最后一次gap=1,就是直接插入排序{gap = gap / 3 + 1;//每次都要减少对应的间距for (int i = 1; i < n; i++)//直接插入排序{int j;int tmp = a[i];for (j = i - gap; j >= 0; j -= gap){if (a[j] > tmp){a[j + gap] = a[j];}elsebreak;}a[j + gap] = tmp; }}
}
快速排序
引言
快速排序(Quick Sort)是一种分而治之的排序算法。它通过选择一个基准元素,将数组分为两部分,一部分比基准销小,另一部分比基准大,然后对这两部分进行快速排序,最终得到有序的数组。
算法思想
第一步、选择基准元素;从数组中选择一个元素作为基准。
第二步、分割数组:将比基准小的元素放在基准的左边,比基准大的元素放在基准的右边。
第三步、递归排序:对基准左边和右边的子数组分别进行快速排序。
重复步骤一、二、三、直到子数组的长度为1或0。
动图展示
动图分析
这里选择数组首元素6的位置作为基准元素的位置,接下来目的就是把数组分左边小于基准元素右边大于基准元素。
左边指针为L右边指针为R,这里注意远离基准元素位置的指针要先走,R先走,从右向左找比a[keyi]小的数然后停下,L走,L从左向右走,找到比a[keyi]大的数然后停下。将两者位置上的值进行交换。然后继续R走,L走,直到两个指针相遇。
相遇后将这个位置的数与基准位置上的数进行交换。
然后再递归左边和右边的序列即可。
代码实现
void Quicksort(int* a, int left, int right)
{//改为左边先走即可(keyi右端点)if (left >= right)return;int keyi = left; //选取基准位置int begin = left; int end = right; while (left < right){ while (left < right && a[right] > a[keyi] ){ right--; }while (left < right && a[left] < a[keyi]) {left++; }swap(a[left], a[right]);} swap(a[left], a[keyi]); keyi = left; Quicksort(a, begin, keyi - 1); Quicksort(a, keyi + 1, end);
}
堆排序
引言
堆排序(Heap Sort)就是对直接选择排序的一种改进。此话怎讲呢?直接选择排序在待排序的n个数中进行n-1次比较选出最大或者最小的,但是在选出最大或者最小的数后,并没有对原来的序列进行改变,这使得下一次选数时还需要对全部数据进行比较,效率大大降低。堆排序算法是Floyd和Williams在1964年共同发明的,同时他们发明了“堆”这种数据结构。
大堆和小堆
这里简单的说下什么是小堆什么是大堆。小堆就是父节点的值比两个孩子节点的值都要小,孩子节点之间无大小比较;大堆就是父节点比两个孩子的节点的值都要大,孩子节点之间无比较。
算法思想
堆排序使用到二叉树的调整算法,由于向下调整算法更优,这里只给出向下调整算法,向下调整算法的目的是为了建堆;建小堆排好是降序,建大堆排好是升序。
第一步、建好大堆:使用向下调整算法实现建堆。
第二步、交换头尾元素:每次建好堆之后我们可以确定的是堆顶一定是值最大的元素,将他交换到数列的末尾。
第三步、再次建堆:交换首尾之后,原来的堆就遭到了破坏,因此我们需要再次重新建堆,需要注意的是这一次建堆元素的个数就减一,因为刚才交换到最后的最大值已经算是排好的了,因此我们需要将剩下的元素建堆。
重复上述操作n-1次就排好了。
动图展示
代码实现
//堆排序(升序)
void adjustdown(int* a, int parent,int n)
{int child = 2 * parent + 1;while (child < n){if (child + 1 < n && a[child] < a[child + 1])child++;if (a[child] > a[parent]){swap(a[child], a[parent]);parent = child;child = child * 2 + 1; }elsebreak;}
}
void heapsort(int* a, int n)
{int end = n;while (end > 0)//堆不为空时{for (int i = (end - 2) / 2; i >= 0; i--)adjustdown(a, i, end);//先向下调整end--;//调整完之后swap(a[0], a[end]);//下一次要调整的堆的个数就是这一次要交换的目标值}
}
归并排序
引言
归并是一种常见的算法思想,在许多领域都有广泛的应用。归并排序的主要目的是将两个已排序的序列合并成有序的序列。
算法思想
当然,对于一个非有序的序列,可以拆成两个非有序的序列。然后分别调用归并排序,然后对两个有序的序列在执行合并的过程。所以这里的“归”其实是递归,“并”就是合并。
整个算法的执行过程用mergeSort(a[],l,r)描述,代表当前代排序的数组a,左下标i,右区间下标r,分为以下几步。
第一步:计算中点mid=(l+r)/2;
第二步:递归调用mergeSort(a[],l,mid)和mergeSort(a[],mid+1,r).
第三步:将第二步中的两个数组进行合并,在储存在a[l:r]。
调用时,调用mergeSort(a[],0,n-1)就能得到整个数组的排序结果了。
动图展示
代码展示
void merge(int*a,int begin,int mid,int end)
{int* b=new int[end-begin+1];//开辟区间所占整形大小的空间 int i=begin,j=mid+1;int k=0;//设置遍历下标初始值 while(i<=mid&&j<=end)//对辅助数组处理 {if(a[i]<a[j])b[k++]=a[i++];elseb[k++]=a[j++];}while(i<=mid)//把多余的一半放到辅助数组中 b[k++]=a[i++];while(j<=end)b[k++]=a[j++];k=0;for(int i=begin;i<=end;i++)a[i]=b[k++];
} void mergesort(int*a,int begin,int end)
{if(begin<end){int mid=(begin+end)/2;mergesort(a,begin,mid);//裂开! mergesort(a,mid+1,end);merge(a,begin,mid,end);//合体! }elsereturn;
}
相关文章:
C++:十大排序
目录 时间复杂度分析 选择排序 引言 算法思想 动图展示 代码实现 (升序) 优化 代码实现 分析 冒泡排序 引言 算法思想 动图展示 代码实现 插入排序 引言 算法思想 动图展示 代码实现 计数排序 引言 算法思想 动图展示 代码实现 桶排序 引言 算法思…...
Python武器库开发-武器库篇之Mongodb未授权漏洞扫描器(五十六)
Python武器库开发-武器库篇之Mongodb未授权漏洞扫描器(五十六) MongoDB 未授权访问漏洞简介以及危害 MongoDB是一款非常受欢迎的开源NoSQL数据库,广泛应用于各种Web应用和移动应用中。然而,由于默认配置的不当或者管理员的疏忽,导致不少Mon…...
【论文速读,找找启发点】2024/6/16
ICME 2023 End-To-End Part-Level Action Parsing With Transformer 类似 DETR,通过 加 query的方式实现 端到端 ELAN: Enhancing Temporal Action Detection with Location Awareness 如何实现位置感知? > 重叠的卷积核? Do we really …...
canal监控mysql变化
目录 概述实践代码总结表创建插入一行数据更新一行数据删除一笔数据 概述 本文测试 canal 监控 mysql 表变化。canal 1.1.7 mysql 8.0.x 版本。 实践 代码 public static void main(String[] args) {// 创建一个 CanalConnector 连接器// username:字符串类型,Canal使用该用…...
MySQLWorkbench导出sql文件
MySQLWorkbench导出sql文件 前言效果图导出操作选择要导出的数据库遇到的问题解决问题 查看mysql路径 前言 在完成数据库搭建之后,需要为上线做准备,那么就需要导出数据库的建库sql了 本篇文章讲解的是mysql Workbench 导出数据建库脚本 效果图 导出操…...
不一样的SYSTEM APP(SYSTEM flag和system_prop区别)
1.问题引入 在Android开发中, 1)Framework中PackageManager扫包后,会把app归类为SYSTEM, SYSTEM_EXT, PRIVILEGED 类别. 2)同样的, SeAndroid也会把APP归类程platform_app, system_app, untrusted_app(甚至还有其他,mediaprovider,gmscore_app). flag SYSTEM和system_app我们…...
C++ 和 JAVA 位运算符
C 和 JAVA 位运算符...
项目进度和成本管理
1.如何正确标识出软件项目活动? 正确标识软件项目活动是项目管理中的一个重要步骤,它有助于确保项目的顺利进行和成功完成。以下是一些标识软件项目活动的步骤和建议: 项目范围定义:首先明确项目的目标和范围,这将帮助…...
Dorkish:一款针对OSINT和网络侦查任务的Chrome扩展
关于Dorkish Dorkish是一款功能强大的Chrome扩展工具,该工具可以为广大研究人员在执行OSINT和网络侦查任务期间提供强大帮助。 一般来说,广大研究人员在执行网络侦查或进行OSINT信息收集任务过程中,通常会使用到Google Dorking和Shodan&…...
树莓派4B_OpenCv学习笔记10:调整视频帧大小
今日继续学习树莓派4B 4G:(Raspberry Pi,简称RPi或RasPi) 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1: 今日学习一下如何降低视频帧像素 文章提供测试代码讲解…...
MySQL 保姆级教程(五):数据过滤
第 7 章 数据过滤 7.1 组合 WHERE 子句 MySQL 允许给出多个 WHERE 子句,这些子句可用用两种方式使用:AND 或 OR 操作符 7.1.1 AND 操作符 输入: SELECT server_cost.cost_name,server_cost.cost_value,server_cost.default_value FROM server_cost W…...
《全职猎人》
《全职猎人》 [1-2]是日本漫画家富坚义博的作品。 1999年版改编电视动画由日本动画公司负责动画制作,于1999年10月16日-2001年3月30日在富士电视台播出,该动画的故事至贪婪之岛篇章结束,全92话。 该作在富坚义博老师天马行空的想…...
Linux各目录的作用
Linux各目录的作用 目录作用~登录用户对应的目录.当前工作目录$PATH环境变量/根目录/boot启动Linux使用的文件,例如Linux内核,包括连接文件和镜像文件,(删了就启动不了了)/bin(/usr/bin,/usr/local/bin)Binary&#x…...
Windows Docker Desktop 安装 postgres
Docker Desktop安装 postgres 12.6 数据库 step docker pull postgres:12.6提前创建F:/D-dockerData/postgres-12.6/data 文件夹用于bind mountdocker run docker run --name postgres-12.6 \-e POSTGRES_PASSWORD123456 \-p 5432:5432 \-v F:/D-dockerData/postgres-12.6/d…...
C# OpenCvSharp Mat操作-创建Mat-构造函数
🌟 Mat类:图像与多维矩阵的魔法 ✨ Mat类是OpenCvSharp中用于表示图像和多维矩阵的核心类。它提供了多种构造函数来创建和初始化矩阵对象。下面我们逐一解释这些构造函数,并通过示例来说明它们的用法。📸 🚀 默认构造函数 Mat() 创建一个空的Mat对象。 Mat mat = …...
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)
最终效果 文章目录 最终效果前言素材下载简单搭建环境控制小鸟生成弹簧 限制小鸟的控制范围弹簧线的显示隐藏飞行新增木头木头销毁不同血量的木头状态配置更多物品爆炸效果创建敌人的小猪创建多个小鸟循环游戏结束相机跟随加分特效不同定义技能的鸟加速鸟回旋鸟爆炸鸟效果 轨迹…...
稀疏矩阵是什么 如何求
稀疏矩阵是一种特殊类型的矩阵,其中大多数元素都是零。由于稀疏矩阵中非零元素的数量远少于零元素,因此可以使用特定的数据结构和算法来高效地存储和处理它们,从而节省存储空间和计算时间。 RowPtr 数组中的每个元素表示对应行的第一个非零元…...
57.Linux/Unix 系统编程手册(下) -- SOCKET : Unix domain
https://blog.51cto.com/u_15567199/5204540 【linux网络编程】容错处理文件 wrap.h、wrap.c_wx623c6c9. // 容错处理 wrap.h #ifndef _WRAP_H_ #define _WRAP_H_#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <error.h> #i…...
Hvv--知攻善防应急响应靶机--Linux1
HW–应急响应靶机–Linux1 所有靶机均来自 知攻善防实验室 靶机整理: 夸克网盘:https://pan.quark.cn/s/4b6dffd0c51a#/list/share百度云盘:https://pan.baidu.com/s/1NnrS5asrS1Pw6LUbexewuA?pwdtxmy 官方WP:https://mp.weixin.…...
Solus Linux: 有自己的软件包管理器
Solus Linux 是一个独立的 Linux 发行版,它以简单易用和现代化的用户体验而著称。Solus Linux 使用的包管理器是 eopkg,它具有以下优势和特点: 用户友好的界面:eopkg 提供了一个简洁直观的命令行界面,使得用户可以轻松…...
Java GUI编程
引言 图形用户界面(GUI)编程是使应用程序与用户进行交互的重要部分。Java提供了多种用于GUI开发的工具和库,最常用的是Swing和AWT。本文将详细介绍Java GUI编程的基础知识,包括Swing和AWT框架、事件处理以及高级GUI组件的使用&…...
ROS机器人小车建模仿真与SLAM
文章目录 一、URDF二、创建小车模型1.创建功能包2.导入依赖3.创建urdf,launch文件:4.可视化 三、添加雷达1.xacro文件2.集成和修改launch3.添加摄像头和雷达 三.GAZEBO仿真四、orbslam2kitti1.下载2.安装编译ORB_SLAM23.运行Kitee数据集 一、URDF URDFÿ…...
Windows10安装Docker Desktop(实操步骤版)
1,下载Docker Desktop 官网下载地址: https://desktop.docker.com/win/stable/amd64/Docker%20Desktop%20Installer.exe 国内镜像下载地址(本人下载这个): https://smartidedl.blob.core.chinacloudapi.cn/docker/2…...
Leetcode 45. 跳跃游戏 II(DP 双指针)
Leetcode 45. 跳跃游戏 II 动态规划 使用dp [ ] 记录每个位置可达的最小步数,每到达一个点时,更新该点所能跳跃区间内的所有点的dp值 时间复杂度较高 class Solution {public int jump(int[] nums) {int n nums.length;int dp[] new int [n];int N …...
Codeforces Round 952 (Div. 4)(实时更新)
A - Creating Words 题意:略 代码: #include<bits/stdc.h> #define ios ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)//不能使用scanf了 #define int long long #define loop(n) for(int i0;i<n;i) #define rloop(n) for(int in-1;i>…...
【AI实践】Dify开发应用和对接微信
自定义应用 创建应用有2种, 从应用模板创建 空白应用,也就是自定义应用 选择翻译助手 Translation assistant模板创建一个应用 自定义应用,创建一个child_accompany_bot自定的应用,用来支持家长,如何解决低龄儿童的…...
精准定位,智慧提纯:高级数据提取策略
在数据驱动的时代,高级数据提取策略成为企业决策、科学研究以及各类项目成功的关键。数据提取,不仅仅是简单地收集信息,而是需要精准定位目标数据,并通过智慧提纯方法,从海量数据中提取出有价值、有深度的信息。本文将…...
USB转I2C转SPI芯片CH341与CH347比较
1. 芯片中文资料: USB转I2C转SPI芯片CH341 高速USB转接芯片CH347转9M双串口转I2C转SPI转JTAG转SWD USB2.0高速转接芯片CH347应用开发手册 2. CH341与CH347比较: 类别CH341CH347备注串口速度2M9MCH347的串口速度更快设置CH341的I2C或SPI不能与串口同…...
期权无风险套利(Risk-Free Arbitrage)举例以及期权无套利定价公式
期权市场的无风险套利 中文版 期权市场中的套利实例 为了清楚地说明,让我们通过一个现实的例子来展示套利。 期权市场中的套利实例 假设市场上有以下价格: 标的股票价格:100美元欧式看涨期权(行权价100美元,3个月…...
Java基础知识巩固自测(上)
前言 该文章适用于已初步了解Java基础知识的入门学习者,便于快速回顾知识点,查漏补缺。 内容包括:Java面向对象相关知识、SQL基础语法 复习建议技巧 实用3W思维法(What、Why、How) 1. What(什么&#x…...
wordpress做产品页教程/网络推广网站电话
注:如果没有 root 权限也是可以试试,一般情况下,都需要 root 权限,才能连接成功。1.需要确保你的开发 PC 和 Android 手机都连上了 wifi 并处于同一网段下;2.开启 usb 调试,且用 usb 将 Android 设备连接到…...
wordpress会员多语言/免费建站的网站
事件中的 this 在事件的处理函数中,可以通过 this 关键字来指代绑定该事件的标签。 <p id"para"> 我是一个p标签 </p> 在点击完 <p> 标签后获取到它里面的内容,常规做法: para.addEventListener("click&quo…...
做企业网站好的/seo推广有哪些公司
有时我们需要在html元素的title中换行显示信息。以下几种方法均可以实现: 直接在titile属性中使用换行,如下所示: 1 <a href"asd"title"asdsad2 asdsad3 asd">asdsadsad</a>在title属性中使用AscII码&…...
flash 做网站教程/优化大师官网
集合框架(collections framework)首先要明确,集合代表了一组对象(和数组一样,但数组长度不能变,而集合能)。Java中的集合框架定义了一套规范,用来表示、操作集合,使具体操作与实现细节解耦。其实说白了,可以…...
网站建设的流程图示/淘宝站外引流推广方法
重构学习笔记1. 封装集合 概念:本文所讲的封装集合就是把集合进行封装,只提供调用端需要的接口。 正文:在很多时候,我们…...
海南海口做网站/深圳网站设计实力乐云seo
记录一个小知识点: 我们会看到这样利用循环的代码: for _ in range(n): _ 在这里是什么意思? _ 是占位符:表示不在意变量的值,只是用于循环遍历n次,和使用i没什么区别,只不过使用_就表示我不在…...