SCAU 数据结构 实验六 排序算法

在这里插入图片描述
![[Pasted image 20240在这里插入图片描述

8638 直接插入排序

Description

用函数实现直接插入排序,并输出每趟排序的结果.

输入格式

第一行:键盘输入待排序关键的个数n
第二行:输入n个待排序关键字,用空格分隔数据

输出格式

每行输出一趟排序结果,数据之间用一个空格分隔

输入样例

10
5 4 8 0 9 3 2 6 7 1

输出样例

4 5 8 0 9 3 2 6 7 1
4 5 8 0 9 3 2 6 7 1
0 4 5 8 9 3 2 6 7 1
0 4 5 8 9 3 2 6 7 1
0 3 4 5 8 9 2 6 7 1
0 2 3 4 5 8 9 6 7 1
0 2 3 4 5 6 8 9 7 1
0 2 3 4 5 6 7 8 9 1
0 1 2 3 4 5 6 7 8 9
在这里插入图片描述

1.插入排序:在原有的序列基础上,一次插入一个元素
2.插入排序是一种稳定的排序算法,如果碰见一个和插入元素相 等的,那么插入元素把想插入的元素放在相等元素的后面。
3.时间复杂度为 O(n^2),在最坏情况下需要进行 n*(n-1)/2 次比较和移动操作。

#include<iostream>
using namespace std;int main()
{int n,i,j,k;cin >> n;int a[n+5];for(i=1;i<=n;i++)   cin >> a[i];//输入for(i=2;i<=n;i++){//如果未排序的比已排序的最大的那个数要小
//例如括号内的是已排序的(13,38,49,65,76,97)27,
//这里就是97比27要大,需要排序if(a[i]<a[i-1]){a[0]=a[i];//把要排序的那个27保存起来//a[i]=a[i-1];//27的位置放置97这个数字,此时的情况是(13,38,49,65,76,97),97for(j=i-1;a[0]<a[j];j--)//全部往后移,为要插入的数腾出空间,最后是(13,38,38,49,65,76),97a[j+1]=a[j];a[j+1]=a[0];//把暂存的27放到第一个38的位置}for(int k=1;k<=n;k++)   cout << a[k] << " ";cout << endl;}return 0;
}

8639 折半插入排序

Description

用函数实现折半插入排序,并输出每趟排序的结果.

输入格式

第一行:键盘输入待排序关键的个数n
第二行:输入n个待排序关键字,用空格分隔数据

输出格式

每行输出一趟排序结果,数据之间用一个空格分隔

输入样例

10
5 4 8 0 9 3 2 6 7 1

输出样例

4 5 8 0 9 3 2 6 7 1
4 5 8 0 9 3 2 6 7 1
0 4 5 8 9 3 2 6 7 1
0 4 5 8 9 3 2 6 7 1
0 3 4 5 8 9 2 6 7 1
0 2 3 4 5 8 9 6 7 1
0 2 3 4 5 6 8 9 7 1
0 2 3 4 5 6 7 8 9 1
0 1 2 3 4 5 6 7 8 9

#include<iostream>
#include<algorithm>
using namespace std;int d[200000];  // 定义一个足够大的数组// 遍历函数,用于输出数组中的元素
void Travers(int n) {for(int i = 1; i <= n; i++) {cout << d[i] << " ";}cout << endl;
}int main() {int n;cin >> n;  // 读取数组的元素数量// 将元素输入到数组中,从下标1开始for(int i = 1; i <= n; i++) {cin >> d[i];}int low, high, mid;// 从第二个元素开始进行插入排序for(int i = 2; i <= n; i++) {d[0] = d[i];  // 将当前元素暂存到哨兵位置d[0]low = 1;high = i - 1;// 二分查找插入位置while(low <= high) {mid = (low + high) / 2;  // 计算中间位置if(d[0] < d[mid]) {high = mid - 1;  // 如果待插入元素小于中间元素,在左半部分查找} else {low = mid + 1;  // 如果待插入元素大于等于中间元素,在右半部分查找}}// 将元素右移,为插入元素腾出位置for(int j = i - 1; j >= high + 1; j--) {d[j + 1] = d[j];}// 将暂存的哨兵元素插入到正确位置d[high + 1] = d[0];// 每趟排序后输出数组的当前状态Travers(n);}return 0;
}

8640 希尔(shell)排序

Description

用函数实现希尔(shell)排序,并输出每趟排序的结果,初始增量d=n/2,其后d=d/2

输入格式

第一行:键盘输入待排序关键的个数n
第二行:输入n个待排序关键字,用空格分隔数据

输出格式

每行输出一趟排序结果,数据之间用一个空格分隔

输入样例

10
5 4 8 0 9 3 2 6 7 1

输出样例

3 2 6 0 1 5 4 8 7 9
1 0 3 2 4 5 6 8 7 9
0 1 2 3 4 5 6 7 8 9

在这里插入图片描述

1.希尔排序:插入排序的升级版
当刚开始元素很无序的时候,增量最大,所以插入排序的元素个数很少,速度很快;当元素基本有序了,增量很小, 插入排序对于有序的序列效率很高。
2.不稳定:3 5 1 5 0 8
第一个5会交换到第二个5后面

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <malloc.h>
#include <algorithm>
#include <vector>
using namespace std;int n, a[100005];// 打印数组函数
void print()
{for (int i = 0; i < n; i++)  // 从下标0到n-1输出数组元素cout << a[i] << ' ';cout << endl;
}// 希尔排序函数
void shellSort() {for (int gap = n / 2; gap > 0; gap /= 2) {  // 初始化步长为数组长度的一半,逐次减半for (int i = gap; i < n; i++) {  // 从当前步长开始遍历数组for (int j = i - gap; j >= 0 && a[j] > a[j + gap]; j -= gap) {  // 插入排序,将元素按步长间隔进行比较和交换swap(a[j], a[j + gap]);  // 交换元素位置}}print();  // 每次步长变化后打印数组}
}int main()
{cin >> n;  // 输入数组长度for (int i = 0; i < n; i++)  // 输入数组元素cin >> a[i];shellSort();  // 调用希尔排序函数return 0;  // 程序结束
}

8641 冒泡排序

Description

用函数实现冒泡排序,并输出每趟排序的结果(要求当一趟冒泡过程中不再有数据交换,则排序结束)

输入格式

第一行:键盘输入待排序关键的个数n
第二行:输入n个待排序关键字,用空格分隔数据

输出格式

每行输出每趟排序结果,数据之间用一个空格分隔

输入样例

10
5 4 8 0 9 3 2 6 7 1

输出样例

4 5 0 8 3 2 6 7 1 9
4 0 5 3 2 6 7 1 8 9
0 4 3 2 5 6 1 7 8 9
0 3 2 4 5 1 6 7 8 9
0 2 3 4 1 5 6 7 8 9
0 2 3 1 4 5 6 7 8 9
0 2 1 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
在这里插入图片描述
冒泡:
1.元素俩俩比较,将大的元素向后调,若元素大小相等,则不交换,所以是稳定排序
2.双重循环:
时间复杂度O(n^2)
空间复杂度O(1)
3.注意flag判断是否发生交换


#include <iostream>
#include <queue>
#include<cstring>
using namespace std;
const int N = 550, M = 10010; 
int a[N];int main()
{int n;cin >> n;for (int i = 0; i < n; i++)cin >> a[i];for (int i = 0; i < n; i++){int mark = 1;for (int j = 0; j < n-i-1; j++)if (a[j+1] < a[j]){swap(a[j], a[j + 1]);mark = 0;}for (int k = 0; k < n; k++)cout << a[k]<<" ";cout << endl;//某一趟全部不交换才结束if (mark)break;//最后一趟也要输出}return 0;
}

8642 快速排序

Description

用函数实现快速排序,并输出每次分区后排序的结果

输入格式

第一行:键盘输入待排序关键的个数n
第二行:输入n个待排序关键字,用空格分隔数据

输出格式

每行输出每趟排序的结果,数据之间用一个空格分隔

输入样例

10
5 4 8 0 9 3 2 6 7 1

输出样例

1 4 2 0 3 5 9 6 7 8
0 1 2 4 3 5 9 6 7 8
0 1 2 4 3 5 9 6 7 8
0 1 2 3 4 5 9 6 7 8
0 1 2 3 4 5 8 6 7 9
0 1 2 3 4 5 7 6 8 9
0 1 2 3 4 5 6 7 8 9
![[Pasted image 20240605143858.png]]在这里插入图片描述
1.快排:双指针在左右两侧,若右指针所指向的元素比中枢小,则将左指针指向的值赋值未右指针指向的值。移动左指针,同理;
2.不稳定:5 3 3 4 3 8 9 10 11
3.时间复杂度:O(nlogn)

#include <iostream>
#include <cstdio>
using namespace std;// 定义常量 N 表示数组最大长度
const int N = 1000;// 定义数组 q 和变量 n
int q[N];
int n;// 快速排序函数
void sort(int q[], int l, int r) {// 基准条件:如果子数组长度为 0 或 1,则不需要排序if (l >= r) return;// 选择枢轴元素 x,并初始化左右指针 i 和 jint x = q[l], i = l, j = r;// 分区操作while (i < j) {// 从右向左扫描,找到第一个小于枢轴 x 的元素while (i < j && q[j] >= x) j--;// 将该元素放到左侧位置q[i] = q[j];// 从左向右扫描,找到第一个大于枢轴 x 的元素while (i < j && q[i] <= x) i++;// 将该元素放到右侧位置q[j] = q[i];}// 将枢轴元素放到正确位置q[i] = x;// 输出当前排序结果,用于调试for (int i = 0; i < n; i++) cout << q[i] << ' ';cout << endl;// 对左右子数组递归排序sort(q, l, j - 1);sort(q, j + 1, r);
}// 主函数
int main() {// 输入数组长度 ncin >> n;// 输入数组元素for (int i = 0; i < n; i++) cin >> q[i];// 调用快速排序函数sort(q, 0, n - 1);// 返回 0 表示程序正常结束return 0;
}

8643 简单选择排序

Description

用函数实现简单选择排序,并输出每趟排序的结果

输入格式

第一行:键盘输入待排序关键的个数n
第二行:输入n个待排序关键字,用空格分隔数据

输出格式

每行输出每趟排序的结果,数据之间用一个空格分隔

输入样例

10
5 4 8 0 9 3 2 6 7 1

输出样例

0 4 8 5 9 3 2 6 7 1
0 1 8 5 9 3 2 6 7 4
0 1 2 5 9 3 8 6 7 4
0 1 2 3 9 5 8 6 7 4
0 1 2 3 4 5 8 6 7 9
0 1 2 3 4 5 8 6 7 9
0 1 2 3 4 5 6 8 7 9
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
在这里插入图片描述
1.选择排序:给每个位置选存在的最小值
2.选择排序不稳定:举个例子 5 8 5 2 9,
3.时间复杂度:O(n^2)空间复杂度:O(1);

//选择排序 
void SelectSort(int a[], int n){for(int i = 0; i < n; i ++){int min = i;//min记录最下元素的下标 for(int j = i; j < n; j ++){if(a[j] < a[min]) min = j;}if(min != i) swap(a[i], a[min]);//交换两个值 }
}

8644 堆排序

Description

用函数实现堆排序,并输出每趟排序的结果

输入格式

第一行:键盘输入待排序关键的个数n
第二行:输入n个待排序关键字,用空格分隔数据

输出格式

第一行:初始建堆后的结果
其后各行输出交换堆顶元素并调整堆的结果,数据之间用一个空格分隔

输入样例

10
5 4 8 0 9 3 2 6 7 1

输出样例

9 7 8 6 4 3 2 5 0 1
8 7 3 6 4 1 2 5 0 9
7 6 3 5 4 1 2 0 8 9
6 5 3 0 4 1 2 7 8 9
5 4 3 0 2 1 6 7 8 9
4 2 3 0 1 5 6 7 8 9
3 2 1 0 4 5 6 7 8 9
2 0 1 3 4 5 6 7 8 9
1 0 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9

代码1

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>using namespace std;int n, a[100005];void print()
{for (int i = 1; i <= n; i++)cout << a[i] << ' ';cout << endl;
}void HeapAdjust(int Start, int End)//将a[S...E]调整为以a[S]为根的大根堆
{int dad = Start;int son = dad * 2;while (son <= End)//子结点在范围内才能进行比较{if (son + 1 <= End && a[son] < a[son + 1])son++;//选择大的子结点if (a[dad] > a[son])return;else{swap(a[dad], a[son]);dad = son;son = dad * 2;}}
}void HeapSort()
{for (int i = n / 2; i >= 1; i--){HeapAdjust(i, n);//初建堆}print();for (int i = n; i > 1; i--){swap(a[1], a[i]);HeapAdjust(1, i - 1);print();//输出调整堆的结果}
}int main()
{cin >> n;for (int i = 1; i <= n; i++)cin >> a[i];HeapSort();return 0;
}

代码2

#include <iostream>
using namespace std;const int N = 1000;
int a[N];
int n; // 堆的大小// 向下调整函数:调整堆
void down(int len,int u) {int t = u;if (2 * u <= len && a[2 * u] > a[t]) t = 2 * u;if (2 * u + 1 <= len && a[2 * u + 1] > a[t]) t = 2 * u + 1;if (t != u) {swap(a[t], a[u]);down(len,t);}
}
void heapSort(int len) {// 建堆for (int i = len / 2; i >= 1; i--) down(len, i);// 输出初始堆for (int i = 1; i <= len; i++) cout << a[i] << ' ';cout << endl;// 排序过程for (int i = 1; i < len; i++) {swap(a[1], a[len - i + 1]); // 将堆顶元素(最大值)交换到数组末尾down(len - i, 1); // 对剩余堆进行调整// 输出调整后的堆for (int j = 1; j <= n; j++) cout << a[j] << ' ';cout << endl;}
}int main() {cin >> n;for (int i = 1; i <= n; i++) cin >> a[i];heapSort(n);// 输出排序后的数组return 0;
}

8645 归并排序(非递归算法)

Description

用函数实现归并排序(非递归算法),并输出每趟排序的结果

输入格式

第一行:键盘输入待排序关键的个数n
第二行:输入n个待排序关键字,用空格分隔数据

输出格式

每行输出每趟排序的结果,数据之间用一个空格分隔

输入样例

10
5 4 8 0 9 3 2 6 7 1

输出样例

4 5 0 8 3 9 2 6 1 7
0 4 5 8 2 3 6 9 1 7
0 2 3 4 5 6 8 9 1 7
0 1 2 3 4 5 6 7 8 9

在这里插入图片描述
1.非递归的归并排序:
先将n个元素按顺序划分为n/2组(n为奇数,则最后一个为一组)
每一组在组内进行排序
将相邻的两个组一一合并在排序
不断重复直到完成排序
2.稳定:合并过程中我们可以保证如果两个当前元素相等时,我们把处在前面的序列的元素保存在结 果序列的前面
3.时间复杂度O(nlogn)

#include <iostream>
#include <algorithm>
#include <cstring>using namespace std;const int N = 1010;
int len;
int arr[N], temp[N];void merge(int arr[], int l, int mid, int r)
{int k = 0, i = l, j = mid + 1;// 合并两个有序子数组while (i <= mid && j <= r){if (arr[i] < arr[j])temp[k++] = arr[i++];elsetemp[k++] = arr[j++];}while (i <= mid)temp[k++] = arr[i++];while (j <= r)temp[k++] = arr[j++];// 将合并后的数组复制回原数组for (i = l, j = 0; i <= r; i++, j++)arr[i] = temp[j];
}void merge_sort(int arr[], int len)
{// 迭代合并的步长从 1 开始for (int step = 1; step < len; step *= 2){// 每个步长内进行合并for (int i = 1; i <= len; i += 2 * step){int mid = i + step - 1;int r = min(i + 2 * step - 1, len);merge(arr, i, mid, r);}// 输出排序后的数组for (int i = 1; i <= len; i++)cout << arr[i] << " ";cout << endl;}
}int main()
{cin >> len;for (int i = 1; i <= len; i++)cin >> arr[i];// 调用归并排序算法对数组进行排序merge_sort(arr, len);return 0;
}

8646 基数排序

Description

用函数实现基数排序,并输出每次分配收集后排序的结果

输入格式

第一行:键盘输入待排序关键的个数n
第二行:输入n个待排序关键字,用空格分隔数据

输出格式

每行输出每趟每次分配收集后排序的结果,数据之间用一个空格分隔

输入样例

10
278 109 063 930 589 184 505 069 008 083

输出样例

930 063 083 184 505 278 008 109 589 069
505 008 109 930 063 069 278 083 184 589
008 063 069 083 109 184 278 505 589 930
在这里插入图片描述
1.稳定
2.时间复杂度:O(n * k)
k为位数

#include <iostream>
#include <algorithm>
using namespace std;int x=1;  //用于算每个位数的值bool cmp(int a,int b)
{a/=x;b/=x;if(a%10<b%10) //当前要比较的值比较小的靠前return true;return false;
}int main()
{int n;cin>>n;int a[n];for(int i=0;i<n;i++)scanf("%d",&a[i]);while(x<=100){sort(a,a+n,cmp);for(int i=0;i<n;i++)printf("%03d ",a[i]);  //按格式输出printf("\n");x*=10;  //每次要求的位数乘10}return 0;
}

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

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

相关文章

十三、resultMap解析

分为两部分&#xff1a;解析和使用 解析 1.解析XML的时候单独解析所有的resultMap标签&#xff0c;封装成ResultMap对象存入configuration中 2.解析XML中的SQL语句&#xff0c;封装MappedStatement对象&#xff0c;这里会根据SQL的返回类型是resultMap还是resultType做处理。如…

C语言 | Leetcode C语言题解之第133题克隆图

题目&#xff1a; 题解&#xff1a; struct Node** visited; int* state; //数组存放结点状态 0&#xff1a;结点未创建 1&#xff1a;仅创建结点 2&#xff1a;结点已创建并已填入所有内容void bfs(struct Node* s) {if (visited[s->val] && state[s->val] 2…

Python Lambda函数的应用实例教程

在Python编程中&#xff0c;lambda函数是一种简洁且强大的工具&#xff0c;用于创建小型匿名函数。它们在需要快速定义简单函数时特别有用。本文将详细介绍lambda函数的语法及其多种应用实例&#xff0c;帮助读者更好地理解和使用lambda函数。 一、lambda函数的基本概念 1.1 什…

c++(内存分配,构造,析构)

#include <iostream>using namespace std; class Per { private:string name;int age;double *height;double *weigh; public://无参构造Per(){cout << "Per::无参构造" << endl;}//有参构造Per(string name,int age,double height,double weigh):…

【TB作品】 51单片机8x8点阵显示滚动汉字仿真

功能 题目5基于51单片机LED8x8点阵显示 流水灯 直接滚动显示HELLO 直接滚动显示老师好 代码 void main( void ) {/** 移位后&#xff0c;右边的是第一个595&#xff0c;接收0X02&#xff0c;显示出0X02* 移位后&#xff0c;左边的是第2个595&#xff0c;接收0Xfe&#xff0c…

创建常规DLL的动态链接库

本文仅供学习交流&#xff0c;严禁用于商业用途&#xff0c;如本文涉及侵权请及时联系本人将于及时删除 【例9.3】创建一个MFC 常规DLL的动态链接库Areadll&#xff0c;在该动态链接库中添加一个导出类CArea&#xff0c;通过该类获取正方形和圆的面积。 (1) 使用“MFC动态链接…

Allegro器件角度倾斜如何回正?

Allegro器件角度倾斜,坐标含有小数点调整为45度整数倍的方法 Allegro器件角度倾斜回正的方法。 在用Allero进行PCB设计过程中,有时候由于误操作;或者刚开始器件需要非45度整数倍的角度,后又需要调整为整数倍的角度。器件角度倾斜含有小数点调整为45度整数倍的方法。 1、如…

Arduino网页服务器:如何将Arduino开发板用作Web服务器

大家好&#xff0c;我是咕噜铁蛋&#xff01;今天&#xff0c;我将和大家分享一个有趣且实用的项目——如何使用Arduino开发板搭建一个简易的网页服务器。通过这个项目&#xff0c;你可以将Arduino连接到互联网&#xff0c;并通过网页控制或查询Arduino的状态。 一、项目背景与…

vue实现pdf下载——html2canvas

html2canvas 官方文档https://html2canvas.hertzen.com/getting-started html2canvas 的原理是通过遍历DOM树,将每一个HTML元素转化为Canvas对象,并叠加到一起形成一张完整的图片或者PDF文件。 1. 安装插件 npm install html2canvas jspdf --save 2.使用&#xff08;页面已经…

git 的基本操作 Master and branch的版本合并 @ VS 1019

前言&#xff1a; 在VS 2019有git 的可视化管理,但&#xff0c;感觉微软其实就是在git上包了一层。版本冲突后&#xff0c;还是要靠git 的命令行代码搞。本文记录了一次&#xff0c;branch和master的版本合并的过程。作为&#xff0c;后续的参考。 【注意&#xff0c;这个是一…

【二进制部署k8s-1.29.4】十三、metrics-server的安装部署

文章目录 简介 一.metrics-server的安装 简介 本章节主要讲解metrics-server的安装&#xff0c;metrics-server主要是用于采集k8s中节点和pod的内存和cpu指标&#xff0c;在观察几点和pod的实时资源使用情况还是比较有用的&#xff0c;如果需要记录历史信息&#xff0c;建议采用…

运行编译openjdk12-33

编译环境 ubuntu20 Ubuntu里用户可以自行选择安装GCC或CLang来进行编译&#xff0c;但必须确保最低的版本为GCC 4.8或者CLang 3.2以上&#xff0c;官方推荐使用GCC 7.8或者CLang 9.1来完成编译。 源码 https://github.com/openjdk/jdk/tree/jdk-12%2B33 安装gcc sudo apt…

使用neural_network_console训练模型并导出.nnb文件应用于索尼spresense

一.创建数据集 首先你需要一个csv标记的数据集 然后我们使用neural_network_console将数据集进行处理 dataset->create dataset->image 用户可以通过该界面选择源目录&#xff08;Source Dir&#xff09;&#xff0c;输出目录&#xff08;Output Dir&#xff09;&…

哈希表、HashMap\Map-1657. 确定两个字符串是否接近

题目链接及描述 1657. 确定两个字符串是否接近 - 力扣&#xff08;LeetCode&#xff09; 题目分析 今日看到这道题目&#xff0c;乍一看觉得非常熟悉&#xff0c;对于将一个字符串转换为另一个字符串的题目之前做过一些。分析题目&#xff0c;题目中所述就是两种操作&#xff…

嵌入式软件跳槽求指导?

嵌入式软件行业的跳槽确实需要一些特定的策略和技巧。我这里有一套嵌入式入门教程&#xff0c;不仅包含了详细的视频讲解&#xff0c;项目实战。如果你渴望学习嵌入式&#xff0c;不妨点个关注&#xff0c;给个评论222&#xff0c;私信22&#xff0c;我在后台发给你。 因为这个…

列存在 OceanBase 数据库架构中的应用与演进

OceanBase 4.3 版本上线了列存功能&#xff0c;以满足实时分析的需求。 本文作为《特性解读&#xff1a;列存技术》的后续&#xff0c;将详细阐述列存技术在OceanBase数据库架构中的应用、发展历程&#xff0c;以及未来的趋势。 一、前言 1970 年&#xff0c;关系模型之父 Co…

LeakSearch:针对网络公开凭证的安全扫描与检测工具

关于LeakSearch 在红队演戏过程中&#xff0c;往往需要获取到针对目标域的访问权限。在这个过程中&#xff0c;很多红队人员会选择使用暴露在互联网上的代理服务器来实现目标域的访问&#xff0c;那么此时就需要在互联网上收集公开暴露的凭证信息。 对于蓝队来说&#xff0c;…

Playwright+Python+Pytest:基础方法二次封装简化及链式调用

引言 随着Web应用的日益复杂化&#xff0c;自动化测试成为了确保软件质量的关键环节。Playwright 是一个强大的自动化库&#xff0c;它支持在 Chromium、Firefox 和 WebKit 中运行自动化脚本。本文将介绍如何使用 Playwright 的 Python 同步 API 来简化点击和填充操作&#xf…

阿里云邮件推送配置教程:API配置的步骤?

阿里云邮件推送服务如何使用&#xff1f;如何配置邮件推送服务&#xff1f; 阿里云提供了强大的邮件推送服务&#xff0c;帮助企业高效地发送邮件通知、验证码、营销活动等。Aok将详细介绍阿里云邮件推送的配置教程&#xff0c;以及API配置的步骤&#xff0c;同时简要提及AokS…

[数据集][目标检测]盲道检测数据集VOC+YOLO格式2173张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2173 标注数量(xml文件个数)&#xff1a;2173 标注数量(txt文件个数)&#xff1a;2173 标注…