常用排序算法详解

  • 1.冒泡排序
    • 原理
    • 示例
    • 代码实现
  • 2.快速排序
    • 原理
    • 示例
    • 代码实现
  • 3.插入排序
    • 原理
    • 示例
    • 代码实现
  • 4.希尔排序
    • 原理
    • 示例
    • 代码实现
  • 5.选择排序
    • 原理
    • 示例
    • 代码实现
  • 6.堆排序
    • 原理
    • 示例
    • 代码实现
  • 7.归并排序
    • 原理
    • 示例
    • 代码实现

本文讲述了常见的排序算法的执行过程,有详细实现过程举例

1.冒泡排序

原理

冒泡排序是指不断的遍历数组,比较相邻两个数的大小,如果顺序不对就将其掉换位置,直到所有的数据位置都正确

示例

原始数组 :[ 6 , 1 , 8 , 3 , 5 , 9 , 2 , 4 ]

操作次数排序结果操作
原始数组[6,1, 8 , 3 , 5 , 8 , 2 , 4 ]进行第一次遍历,比较6和1,位置不对交换
第一次交换结果[ 6 ,1, 8, 3 , 5 , 9 , 2 , 4 ]比较1和8,不交换
第二次交换结果[ 6 , 1 ,8,3, 5 , 9 , 2 , 4 ]比较8和3,交换
第三次交换结果[ 6 , 1 , 3 ,8,5, 9 , 2 , 4 ]比较8和5,交换
第四次交换结果[ 6 , 1 , 3 , 5 ,8,9, 2 , 4 ]比较8和9,不交换
第五次交换结果[ 6 , 1 , 3 , 5 , 8 ,9,2, 4 ]比较9和2,交换
第六次交换结果[ 6 , 1 , 3 , 5 , 8 , 2 ,9,4]比较9和4,交换
第七次交换结果[ 6 , 1 , 3 , 5 , 8 , 2 , 4 ,9]第一次有交换,遍历第二次
遍历第二次结果[ 1 , 3 , 5 , 6 , 2 , 4 ,8,9]第二次有交换,遍历第三次
遍历第三次结果[ 1 , 3 , 5 , 2 , 4 , 6,8,9]第三次有交换,遍历第四次
遍历第四次结果[ 1 , 3 , 2 , 4 , 5,6,8,9]第四次有交换,遍历第五次
遍历第五次结果[ 1 , 2 , 3 , 4,5,6,8,9]第五次有交换,遍历第六次
遍历第六次结果[1,2,3,4,5,6,8,9]第六次无交换,遍历结束

代码实现

    public static int[] sort(int[] sourceArray) throws Exception {//冒泡排序int length = sourceArray.length;//获取数组长度int[] arr = sourceArray;//拷贝数组//for循环用于进行书组遍历for (int i = 0; i < length ; i++) {int l = 0,r = 1;//定义左右指针int a = 0;//用于记录交换次数//while循环用于每次遍历下的数据交换while (l<length && r<length){if (arr[l] < arr[r] ) {//左小于右(正确顺序)针指i和j整体向右挪一个l++;r++;}else {//左大于右(不正确顺序)交换左右,然后针指i和j整体向右挪一个//交换左右int t = arr[l];arr[l] = arr[r];arr[r] = t;//然后针指i和j整体向右挪一个l++;r++;//记录交换次数a++;}}//判断此次遍历是否发生数据交换if (a == 0){break;}}//返回排序后的结果return arr;}

2.快速排序

原理

1.先从数列中取出一个数作为key值(标杆值);
2.将比这个数小的数全部放在它的左边,大于或等于它的数全部放在它的右边;

挖坑填数字,每次比较都拿出一个标杆来和数据进行比较,先从右往左比,遇到比标杆小的就将其放在标杆的坑里(标杆数字所在的数组位置),换过去的数字所在位置成为新的坑,然后在从原来标杆的那个坑(刚刚放进数字的位置)从左往右比较,遇到比标杆数字大或等于的,就放在此时标杆位置所在的坑中,然后再从现在的这个刚放进去数字的坑从有往左比较,知道所有数字均符合左边比标杆小,右边比标杆大

3.对左右两个小数列重复第二步,直至各区间只有1个数。

示例

原始数组 :[ 6 , 1 , 8 , 3 , 5 , 9 , 2 , 4 ]
对原始数组进行第一个标杆的比较:

操作标杆数据结果下一步比较
拿出标杆数据6[ _, 1 , 8 , 3 , 5 , 9 , 2 , 4 ]<从右往左比,比较4和标杆数据
4小于标杆数据,4填坑6[4, 1 , 8 , 3 , 5 , 9 , 2 , _ ]>从左往右比,比较1和标杆数据
1小于标杆数据,不变6[4, 1 , 8 , 3 , 5 , 9 , 2 , _ ]>从左往右比,比较8和标杆数据
8大于标杆数据,8填坑6[4, 1 , _, 3 , 5 , 9 , 2 , 8 ]<从右往左比,比较2和标杆数据
2大于标杆数据,2填坑6[4, 1 , 2, 3 , 5 , 9 ,_, 8 ]>从左往右比,比较3和标杆数据
3小于标杆数据,不变6[4, 1 , 2,3 , 5 , 9 ,_, 8 ]>从左往右比,比较5和标杆数据
5小于标杆数据,不变6[4, 1 , 2, 3 , 5 , 9 ,_, 8 ]>从左往右比,比较9和标杆数据
9大于标杆数据,9填坑6[4, 1 , 2, 3 , 5 ,_ ,9, 8 ]左右比较交汇,该标杆放回坑内
标杆放回坑里[4, 1 , 2, 3 , 5 ,6 ,9, 8 ]该轮比较结束,对标杆6左右进行上述比较

对标杆两边重复上述操作:
(1)标杆6左边数据比较:得到:[ 1,2,3,4,5 ]

操作标杆数据结果下一步比较
拿出标杆数据4[ _ , 1 , 2, 3 , 5 ]<从右往左比,比较5和标杆数据
5大于标杆数据,不变4[ _ , 1 , 2, 3 , 5 ]<从右往左比,比较3和标杆数据
3小于标杆数据,3填坑4[3, 1 , 2, _ , 5 ]>从左往右比,比较1和标杆数据
1小于标杆数据,不变4[3, 1 , 2, _ , 5 ]>从左往右比,比较2和标杆数据
2小于标杆数据,不变4[3, 1 , 2, _ , 5 ]左右比较交汇,该标杆放回坑内
标杆放回坑里,对左右比较[3, 1 , 2, 4 , 5 ]该轮比较结束,对标杆4左右比较,右边只有一位不比较
标杆4左边比较3[2, 1 ,3 ]该轮比较结束,对标杆3左右比较,右边没有不比较
对标杆3左右比较2[ 1, 2 ]该轮比较结束,标杆左边只有一位,不再比较

(2)标杆6右边数据比较:得到:[ 8,9 ]

操作标杆数据结果下一步比较
拿出标杆数据9[ _, 8 ] <从右往左比,比较8和标杆数据
2小于标杆数据,8填坑9[ 8, _ ] 左右比较交汇,该标杆放回坑内
标杆放回坑里[ 8, 9 ]该轮比较结束,标杆左边只有一位,不再比较

最终的到数据:[ 1,2,3,4,5,6,8,9 ]

代码实现

public static void quickSort(int a[],int l,int r){if(l>=r)return;int i = l; int j = r; int key = a[l];//选择第一个数为标杆while(i<j){while(i<j && a[j]>=key)//从右向左找第一个小于标杆的值j--;if(i<j){a[i] = a[j];i++;}while(i<j && a[i]<key)//从左向右找第一个大于标杆的值i++;if(i<j){a[j] = a[i];j--;}}//i == ja[i] = key;quickSort(a, l, i-1);//递归调用quickSort(a, i+1, r);//递归调用}

3.插入排序

原理

1.将数组第一个数当成一个有序数组,然后从第二个数据开始看作无序数组
2.每次拿出无序数组中的第一个数据和有序数组的最后一位开始向前比较
3.将拿出的数据插入有序数组中的合适位置
4.重复上述步骤直至无序数组中所有的数据全部插入有序数组中。

示例

原始数组 :[ 6 , 1 , 8 , 3 , 5 , 9 , 2 , 4 ]

操作有序数组无序数组拿出来的数据
将数组分成有序数组和无序数组61、8、3、5、9、2、41
从后往前比较有序数组,将1插入有序数组1、68、3、5、9、2、48
从后往前比较有序数组,将8插入有序数组1、6 、83、5、9、2、43
从后往前比较有序数组,将3插入有序数组1、3、6 、85、9、2、45
从后往前比较有序数组,将5插入有序数组1、3、5、6 、89、2、49
从后往前比较有序数组,将9插入有序数组1、3、5、6 、8、92、42
从后往前比较有序数组,将2插入有序数组1、2、3、5、6 、8、944
从后往前比较有序数组,将4插入有序数组1、2、3、4、5、6 、8、9

代码实现

    public static void main(String[] args) {int[] nums={ 6 , 1 , 8 , 3 , 5 , 9 , 2 , 4 };int start=1;for(start=1;start<nums.length;start++) {int insert=nums[start];//将数组第二个数据拿出放入insert,做为待插入的数据while(start>0) {if(nums[start-1]>insert) {//从后往前比较,遇到比该数字大的了就将大的数字往后挪一个位置nums[start]=nums[start-1];} else {//若遇到和拿出数字相同的数据,则将insert放入当前空缺位置nums[start]=insert;break;//结束当前循环}start--;//比较的数字往前挪一个}if(start==0) {nums[0]=start;}}for (int i = 0; i < nums.length; i++) {System.out.print(nums[i]+" ");}}

4.希尔排序

希尔排序也称递减增量排序,是对插入排序的改进,以牺牲稳定性的方法提高效率。

原理

1.根据数组长度确定增长量k2(k1 = length / 2)(例如:数组[ 1 , 5 , 3 , 8 , 9 , 3 ])
2.按照增量数列进行分组,一般分成k组(每组数据的两个数据相距k个位置,例如:k为3时,位置0和位置3一组,位置1和位置4一组,位置2和位置5一组)
3.比较每组的数据将其按照增量排序(比较:位置0和位置3数据,位置1和位置4数据,位置2和位置5数据,位置不对的交换)
4.确定增长量k2(k2 = k2 / 2)
5.按照增量数列进行分组,分为k2组(例如:k2 = 2 ,分组:位置0 位置2 位置4一组,位置1 位置3 位置5一组)
6.比较每组的数据将其按照增量排序
…(循环以上步骤直至k=1时为最后一趟)

示例

原始数组 :[ 6 , 1 , 8 , 3 , 5 , 9 , 2 , 4 ]

操作k值结果
计算k值,将原始数据分为k组46 , 1 , 8 , 3 , 5 , 9 , 2 , 4
四组分别排序(交换了第一组6,5 ,第三组8,2)45 , 1 , 2 , 3 , 6 , 9 , 8 , 4
重新计算k,将数据分为k组25, 1 , 2 , 3 , 6 , 9 , 8 , 4
两组分别排序22, 1 , 5 , 3 , 6 , 4 , 8 , 9
计算k,并分组12, 1 , 5 , 3 , 6 , 4 , 8 , 9
排序11, 2 , 3 , 4 , 5 , 6 , 8 , 9

代码实现

    public static void main(String[] args) {int[] nums={1,5,7,9,3,2,4,0,6,8,5};//控制增量序列,增量序列为1的时候为最后一趟for (int i = nums.length/2; i > 0; i/=2) {//根据增量序列,找到每组比较序列的最后一个数的位置for (int j = i; j <nums.length ; j++) {//根据该比较序列的最后一个数的位置,依次向前执行插入排序for (int k = j-i; k >= 0 ; k-=i) {if(nums[k]>nums[k+i]) {int tmp=nums[k];nums[k]=nums[k+i];nums[k+i]=tmp;}}}}System.out.println(Arrays.toString(nums));}

5.选择排序

原理

1.将数组中最小的数据拿出,放在数组第一个作为排序数组
2.在未排序数组中找出最小的,放在拍叙述组的尾部
3.循环执行,直到所有的数字排序完成

示例

原始数组 :[ 6 , 1 , 8 , 3 , 5 , 9 , 2 , 4 ]

操作排序数组未排序数组未排序数组中最小的
原始数组6 , 1 , 8 , 3 , 5 , 9 , 2 , 41
将1放在数组第一位最为排序数组 16 , 8 , 3 , 5 , 9 , 2 , 42
将1放在数组第一位最为排序数组1,26 , 8 , 3 , 5 , 9 , 43
将1放在数组第一位最为排序数组1,2,36 , 8 , 5 , 9 , 44
将1放在数组第一位最为排序数组1 ,2,3,46 , 8 , 5 , 95
将1放在数组第一位最为排序数组1 ,2,3,4,56 , 8 , 96
将1放在数组第一位最为排序数组1,2,3,4,5,68 , 98
将1放在数组第一位最为排序数组1,2,3,4,5,6,899
将1放在数组第一位最为排序数组1,2,3,4,5,6,8 ,9

代码实现

    public static void main(String[] args) {int[] nums={1,5,7,9,3,2,4,0,6,8,5};int start=1;for(start=1;start<nums.length;start++) {int insert=nums[start];while(start>0) {if(nums[start-1]>insert) {nums[start]=nums[start-1];} else {nums[start]=insert;break;}start--;}if(start==0) {nums[0]=start;}}for (int i = 0; i < nums.length; i++) {System.out.print(nums[i]+" ");}}

6.堆排序

堆排序是一种选择排序
堆是一颗完全二叉树:
当所有的结点的值都大于或等于其左右的子结点的值称为大顶堆
当所有的结点的值都小于或等于其左右的子结点的值称为小顶堆

原理

1.先将数组排序成一个大根堆
2.将根节点和最后一个叶子借点交换
3.将非最后一个叶子节点的其他数据排序成大根堆(此时最后一个叶子节点为上一轮排序中的根节点,最大的数据,位置已经确定了)
4.交换该大根堆中的根节点和最后一个叶子结点
…(循环直到所有数据均排列完成)

示例

操作数组
原始数组6 , 1 , 8 , 3 , 5 , 9 , 2 , 4
第一轮大根堆交换节点后结果3,5,8,4,1,6,2,9
第二轮大根堆交换节点后结果2,5,6,4,1,3,89
第三轮大根堆交换节点后结果2,5,3,4,1,689
第四轮大根堆交换节点后结果1,4,3,2,5689
第五轮大根堆交换节点后结果1,2,3,45689
第六轮大根堆交换节点后结果1,2,345689
第七轮大根堆交换节点后结果1,2345689
第八轮大根堆交换节点后结果12345689

具体过程:
在这里插入图片描述

代码实现

import java.util.Arrays;public class HeapSort {public static void main(String[] args) {int[] arr = {3, 5, 2, 7,4,5,8,2,1,9,0,5,4};heapSort(arr);System.out.println(Arrays.toString(arr));}//堆排序public static void heapSort(int[] arr) {//将无序序列构建成一个堆for (int i = arr.length / 2 - 1; i >= 0; i--) {adjustHeap(arr, i, arr.length);}//将堆顶元素和末尾元素交换,将最大元素放置数组末端//重新调整至堆结构,然后继续将堆顶元素和当前末尾元素交换,以此往复for (int i = arr.length - 1; i > 0; i--) {int temp = arr[i];arr[i] = arr[0];arr[0] = temp;adjustHeap(arr, 0, i);}}// 将二叉树调整为堆public static void adjustHeap(int[] arr, int i, int length) {int temp = arr[i];//k=2i+1是i的左子结点for (int k = i * 2 + 1; k < length; k = k * 2 + 1) {if (k + 1 < length && arr[k] < arr[k + 1])//左子结点的值<右子结点的值k++;//指向右节点if (arr[k] > temp) {//如果子结点的值>根节点的值arr[i] = arr[k];//将较大的值赋给当前结点i = k;//i指向k,继续循环比较} elsebreak;}//for循环后,已经将以i为根结点的树的最大值,放在了顶部arr[i] = temp;//将temp值放到调整后的位置}
}

7.归并排序

原理

1.将数组分成不同的组,每次平均分成两个数组,直到无法分成两份
2.将两个长度为1的数组合并成一个长度为2的有序数组
3.将两个长度为2的数组合并成一个长度为4的有序数组
…(重复多遍)
4.直至和并完成

示例

操作数组结果
原始数组[ 6 , 1 , 8 , 3 , 5 , 9 , 2 , 4 ]
[ 6 , 1 , 8 , 3 ] 、 [ 5 , 9 , 2 , 4 ]
[ 6 , 1 ] 、 [ 8 , 3 ] 、 [ 5 , 9 ] 、 [2 , 4 ]
[ 6 ]、 [1 ] 、 [ 8 ]、 [ 3 ] 、 [ 5 ] 、 [9 ] 、 [2 ]、 [ 4 ]
[1 , 6 ] 、[ 3 , 8 ] 、 [ 5 , 9 ] 、[ 2 , 4 ]
[1 , 3 , 6 ,8 ] 、 [ 2, 4 ,5 ,9 ]
[ 1,2,3,4,5,6,8,9 ]

代码实现

public class Test {public static void main(String[] args) {int[] arr = { 6 , 1 , 8 , 3 , 5 , 9 , 2 , 4 };int[] temp = new int[arr.length];//归并排序需要额外的数组空间mergeSort(arr, 0, arr.length - 1, temp);//将数组分成最小单元System.out.println(Arrays.toString(arr));}//分public static void mergeSort(int[] arr, int left, int right, int[] temp) {if (left < right) {int mid = (left + right) / 2;//中间索引mergeSort(arr, left, mid, temp);//向左递归分解数组mergeSort(arr, mid + 1, right, temp);//向右递归分解数组merge(arr, left, mid, right, temp);//分解完成后将数组进行合并}}//治public static void merge(int[] arr, int left, int mid, int right, int[] temp) {int i = left;//i为指向左边序列第一个元素的索引int j = mid + 1;//j为指向右边序列第一个元素的索引int t = 0;//指向临时temp数组的当前索引//先把左右两边有序数据按规则存入temp数组中,直到有一边的数据全部填充temp中while (i <= mid && j <= right) {if (arr[i] <= arr[j]) {temp[t] = arr[i];t++;i++;} else {temp[t] = arr[j];t++;j++;}}//将有剩余数据的一边全部存入temp中while (i <= mid) {//左边序列有剩余元素temp[t] = arr[i];t++;i++;}while (j <= right) {//右边序列有剩余元素temp[t] = arr[j];t++;j++;}t = 0;int tempLeft = left;while (tempLeft <= right) {arr[tempLeft] = temp[t];t++;tempLeft++;}}
}

感谢您对大饼的支持
今天的你也很辛苦,晚安,明天见

在这里插入图片描述

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

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

相关文章

git+码云提交PR流程记录

前提条件&#xff1a;注册码云账号&#xff0c;本地安装git 如果不知道怎么注册和安装&#xff0c;可以参考gitgitee入门教程&#xff08;https://bbs.huaweicloud.com/forum/thread-55222-1-1.html&#xff09; 登录自己的码云账号 登陆了之后&#xff0c;在码云上打开目标项…

项目需求分析5大常见问题及解决方案

需求分析过程中&#xff0c;往往容易导致需求不准确和不完整&#xff0c;引起需求频繁变更&#xff0c;导致项目进度延误和成本增加&#xff1b;而需求分析的误解问题&#xff0c;导致交付产品无法满足客户期待&#xff0c;降低用户满意度和资源浪费。 那么在需求分析中&#x…

力扣第404题 左叶子之和 c++ 递归 与 迭代解法

题目 404. 左叶子之和 简单 给定二叉树的根节点 root &#xff0c;返回所有左叶子之和。 示例 1&#xff1a; 输入: root [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中&#xff0c;有两个左叶子&#xff0c;分别是 9 和 15&#xff0c;所以返回 24示例 2: 输…

asp.net饭店订餐管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio计算机设计定制

一、源码特点 asp.net 饭店订餐管理系统 是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语 言开发 asp.net饭店订餐系统 二、功能介…

设计模式 - 访问者模式

目录 一. 前言 二. 实现 三. 优缺点 一. 前言 访问者模式&#xff0c;即在不改变聚合对象内元素的前提下&#xff0c;为聚合对象内每个元素提供多种访问方式&#xff0c;即聚合对象内的每个元素都有多个访问者对象。访问者模式主要解决稳定的数据结构和易变元素的操作之间的…

Unity实现设计模式——策略模式

Unity实现设计模式——策略模式 策略模式是一种定义一些列算法的方法&#xff0c;这些所有的算法都是完成相同的工作&#xff0c;只是实现不同。它可以通过相同的方式调用所有的算法&#xff0c;减少各种算法类与使用算法类之间的耦合。 策略模式的 Strategy 类层次为 Contex…

放大招,百度文心大模型4.0正在加紧训练,即将发布

插播一条快讯&#xff01; &#xfeff;&#xfeff;刚刚看到一篇报道&#xff0c;说百度正在加紧训练文心大模型4.0&#xff01;百度5月发布了文心大模型3.5&#xff0c;才4个多月又要发布4.0了&#xff0c;这迭代速度简直了。据说这次发布将在10月17日百度世界大会上进行&am…

NeurIPS 2023 | 李飞飞团队提出SiamMAE:孪生掩码自编码器,刷榜视觉自监督方法

在计算机视觉领域&#xff0c;想要建立图像和场景&#xff08;scene&#xff09;之间之间的对应关系是一项比较困难的任务&#xff0c;尤其是在存在遮挡、视角改变或是物体外观发生变化的情况下。 最近&#xff0c;斯坦福大学李飞飞团队对MAE进行扩展&#xff0c;提出了孪生掩…

Tensorflow入门之 Hello World

Tensorflow入门之 Hello World 简介 Tensorflow 是 Google 开源的深度学习框架&#xff0c;来自于 Google Brain 研究项目&#xff0c;在 Google 第一代分布式机器学习框架 DistBelief 的基础上发展起来。 Tensorflow 的官方网址 http://www.tensorflow.org Tensorflow 的 G…

基于边缘网关的智慧工地监测方案

边缘物联网技术为千行百业赋能&#xff0c;依托边缘计算的低延时、高效率、广适用优势&#xff0c;也为工程建设产业带来新的增长动力。 例如在智慧工地应用中&#xff0c;围绕建设施工过程中的人员、设备、环境等要素&#xff0c;利用边缘计算网关构建全面的数据采集、分析、联…

web3.0时代分布式网络协议的异同

Web3.0时代标志着分布式网络协议的兴起&#xff0c;其中IPFS&#xff08;InterPlanetary File System&#xff09;和NDN&#xff08;Named Data Networking&#xff09;是备受瞩目的项目。尽管它们都属于分布式网络协议领域&#xff0c;但在多个方面存在显著区别。以下是IPFS和…

WebSocket ----苍穹外卖day8

介绍 实现步骤 各个模块详解 OnOpen OnOpen:标记一个方法作为处理WebSocket连接打开的方法 当一个客户端与服务器建立 WebSocket 连接时&#xff0c;服务器会接收到一个连接请求。一旦服务器接受了这个连接请求&#xff0c;一个 WebSocket 连接就会被建立。这时&#xff0c;被…

wpf中prism框架

安装prism包&#xff1a; 添加引用 using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Linq; using System.Threading.Tasks; using System.Windows; using Prism.DryIoc; using Prism.Ioc;namespace PrismDemo …

【Amazon】基于AWS云实例(CentOS 7.9系统)使用kubeadm方式搭建部署Kubernetes集群1.25.4版本

文章目录 前言实验架构介绍K8S集群部署方式说明使用CloudFormation部署EC2实例集群环境准备修改主机名并配置域名解析&#xff08;ALL节点&#xff09;禁用防火墙禁用SELinux加载br_netfilter模块安装ipvs安装 ipset 软件包同步服务器时间关闭swap分区安装Containerd 初始化集群…

Flutter_Slider_SliderTheme_滑杆/滑块_渐变色

调用示例以及效果 SliderTheme(data: SliderTheme.of(context).copyWith(trackHeight: 3,// 滑杆trackShape: const GradientRectSliderTrackShape(radius: 1.5),// 滑块thumbShape: const GradientSliderComponentShape(rectWH: 14, overlayRectSpace: 4, overlayColor: Colou…

数据采集时使用HTTP代理IP效率不高怎么办?

目录 前言 一. 测试代理IP速度 二. 调整连接池大小 三. 多线程并发采集 四. 选择稳定的代理服务商 总结 前言 数据采集作为爬虫的重要环节之一&#xff0c;常常会遇到反爬虫的机制&#xff0c;封禁IP等等问题。为了规避这些问题&#xff0c;我们可以使用HTTP代理IP来进行…

react中预览excel表格

查了很多资料&#xff0c;很多插件&#xff0c;有很多也用不了&#xff0c;最后试了xlsx这个插件&#xff0c;可以使用。 话不多少了&#xff0c;直接放代码吧&#xff1a; 1.代码实现 fetch(API).then((res: any) > {res?.blob().then((r: any) > {const reader ne…

HarmonyOS/OpenHarmony原生应用开发-华为Serverless云端服务支持说明(一)

云端服务的实现是HarmonyOS/OpenHarmony原生应用开发的一个重要的环节&#xff0c;如果用户端是鸿蒙原生应用&#xff0c;但是服务端即云端还是基于传统的各种WEB网络框架、数据库与云服务器&#xff0c;那么所谓的原生应用开发实现的数据即后端服务是和以前、现在的互联网、移…

【华为OD机考B卷 | 100分】统计监控、需要打开多少监控器(JAVA题解——也许是全网最详)

前言 本人是算法小白&#xff0c;甚至也没有做过Leetcode。所以&#xff0c;我相信【同为菜鸡的我更能理解作为菜鸡的你们的痛点】。 题干 OD&#xff0c;B 卷 100 分题目【OD 统一考试&#xff08;B 卷&#xff09;】 1. 题目描述 某长方形停车场每个车位上方都有一个监控…