当前位置: 首页 > news >正文

C#经典十大排序算法(完结)

C#冒泡排序算法

简介

冒泡排序算法是一种基础的排序算法,它的实现原理比较简单。核心思想是通过相邻元素的比较和交换来将最大(或最小)的元素逐步"冒泡"到数列的末尾。

详细文章描述

https://mp.weixin.qq.com/s/z_LPZ6QUFNJcwaEw_H5qbQ

代码实现

        /// <summary>/// 递归方式实现冒泡排序/// </summary>/// <param name="arr">arr</param>/// <param name="arrLength">arrLength</param>public static void RecursiveBubbleSort(int[] arr, int arrLength){if (arrLength == 1)return;for (int i = 0; i < arrLength - 1; i++){if (arr[i] > arr[i + 1]){//交换arr[i]和arr[i+1]的值int temp = arr[i];arr[i] = arr[i + 1];arr[i + 1] = temp;}}RecursiveBubbleSort(arr, arrLength - 1);}public static void RecursiveBubbleSortRun(){int[] arr = { 1, 8, 9, 5, 6, 2, 3, 4, 7 };int arrLength = arr.Length;RecursiveBubbleSort(arr, arrLength);Console.WriteLine("排序后结果:" + string.Join(", ", arr));}

C#选择排序算法

简介

选择排序算法的基本思想是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。

详细文章描述

https://mp.weixin.qq.com/s/B1QdqyP8HQgOv8tlSujtog

代码实现

        /// <summary>/// 选择排序算法/// </summary>public static void SelectionSortAlgorithmMain(){int[] array = { 64, 25, 12, 22, 11, 99, 3, 100 };Console.WriteLine("原始数组: ");PrintArray(array);SelectionSortAlgorithm(array);Console.WriteLine("排序后的数组: ");PrintArray(array);}static void SelectionSortAlgorithm(int[] arr){int n = arr.Length;for (int i = 0; i < n - 1; i++){// 在未排序部分中找到最小元素的索引int minIndex = i;for (int j = i + 1; j < n; j++){if (arr[j] < arr[minIndex]){minIndex = j;}}// 将最小元素与未排序部分的第一个元素交换位置int temp = arr[minIndex];arr[minIndex] = arr[i];arr[i] = temp;}}static void PrintArray(int[] arr){int n = arr.Length;for (int i = 0; i < n; ++i){Console.Write(arr[i] + " ");}Console.WriteLine();}

C#插入排序算法

简介

插入排序算法是一种简单、直观的排序算法,其原理是将一个待排序的元素逐个地插入到已经排好序的部分中。

详细文章描述

https://mp.weixin.qq.com/s/YEregZ_GOGgEltGUJadycw

代码实现

 public static void InsertionSort(int[] array){int arrayLength = array.Length;//数组长度(时间复杂度为O(n^2))for (int i = 1; i < arrayLength; ++i){//定义临时变量int temp = array[i];int j = i - 1;while (j >= 0 && array[j] > temp){array[j + 1] = array[j];j--;}array[j + 1] = temp;}}public static void InsertionSortRun(){int[] array = { 26, 15, 5, 3, 38, 36, 44, 27, 47, 2, 46, 4, 50, 19, 48 };Console.WriteLine("排序前:" + string.Join(", ", array));InsertionSort(array);Console.WriteLine("排序后:" + string.Join(", ", array));}

C#希尔排序算法

简介

希尔排序简单的来说就是一种改进的插入排序算法,它通过将待排序的元素分成若干个子序列,然后对每个子序列进行插入排序,最终逐步缩小子序列的间隔,直到整个序列变得有序。希尔排序的主要思想是通过插入排序的优势,减小逆序对的距离,从而提高排序效率。

详细文章描述

https://mp.weixin.qq.com/s/_t9QVuj_rLcNomyv7LcGMA

代码实现

public static void ShellSort(int[] array){int arrLength = array.Length;// 初始化增量(初始间隔)为数组长度的一半int gap = arrLength / 2;// 不断缩小增量,直到增量为1while (gap > 0){// 对每个子序列进行插入排序for (int i = gap; i < arrLength; i++){int temp = array[i];int j = i;// 在子序列内部进行插入排序while (j >= gap && array[j - gap] > temp){array[j] = array[j - gap];j -= gap;}array[j] = temp;}// 缩小增量gap /= 2;}}public static void ShellSortRun(){int[] array = { 19, 20, 22, 32, 34, 50, 99, 49, 1, 11, 11, 55, 35, 93, 96, 71, 70, 38, 78, 48 };Console.WriteLine("排序前数组:" + string.Join(", ", array));ShellSort(array);Console.WriteLine("排序后数组:" + string.Join(", ", array));}

C#归并排序算法

简介

归并排序是一种常见的排序算法,它采用分治法的思想,在排序过程中不断将待排序序列分割成更小的子序列,直到每个子序列中只剩下一个元素,然后将这些子序列两两合并排序,最终得到一个有序的序列。

详细文章描述

https://mp.weixin.qq.com/s/ToURWBfVIl7087Ago8fGdQ

代码实现

  public static void MergeSort(int[] arr, int left, int right){if (left < right){// 计算中间索引int mid = (left + right) / 2;// 对左半部分数组进行归并排序MergeSort(arr, left, mid);// 对右半部分数组进行归并排序MergeSort(arr, mid + 1, right);// 合并两个有序数组Merge(arr, left, mid, right);}}public static void Merge(int[] arr, int left, int mid, int right){int n1 = mid - left + 1; // 左半部分数组的长度int n2 = right - mid;    // 右半部分数组的长度// 创建临时数组int[] leftArr = new int[n1];int[] rightArr = new int[n2];// 将数据拷贝到临时数组for (int i = 0; i < n1; ++i){leftArr[i] = arr[left + i];}for (int j = 0; j < n2; ++j){rightArr[j] = arr[mid + 1 + j];}// 合并两个有序数组int k = left;   // 初始化合并后的数组索引int p = 0;      // 初始化左半部分数组的索引int q = 0;      // 初始化右半部分数组的索引while (p < n1 && q < n2){if (leftArr[p] <= rightArr[q]){arr[k] = leftArr[p];p++;}else{arr[k] = rightArr[q];q++;}k++;}// 复制左半部分数组的剩余元素while (p < n1){arr[k] = leftArr[p];p++;k++;}// 复制右半部分数组的剩余元素while (q < n2){arr[k] = rightArr[q];q++;k++;}}public static void MergeSortRun(){int[] array = { 19, 27, 46, 48, 50, 2, 4, 44, 47, 36, 38, 15, 26, 5, 3 };Console.WriteLine("排序前数组:" + string.Join(", ", array));MergeSort(array, 0, array.Length - 1);Console.WriteLine("排序后数组:" + string.Join(", ", array));}   

C#快速排序算法

简介

快速排序是一种常用的排序算法,它基于分治的思想,通过将一个无序的序列分割成两个子序列,并递归地对子序列进行排序,最终完成整个序列的排序。

详细文章描述

https://mp.weixin.qq.com/s/7vms2Q4s7DBdFs31w4cfVA

代码实现

 public class 快速排序算法{public static void Sort(int[] array, int low, int high){if (low < high){//将数组分割为两部分,并返回分割点的索引int pivotIndex = Partition(array, low, high);//递归对分割后的两部分进行排序Sort(array, low, pivotIndex - 1);Sort(array, pivotIndex + 1, high);}}private static int Partition(int[] array, int low, int high){//选择最后一个元素作为基准元素int pivot = array[high];int i = low - 1;for (int j = low; j <= high - 1; j++){//如果当前元素小于等于基准元素,则将它与i+1位置的元素交换if (array[j] <= pivot){i++;Swap(array, i, j);}}//将基准元素放置到正确的位置上Swap(array, i + 1, high);return i + 1; //返回基准元素的索引}private static void Swap(int[] array, int i, int j){int temp = array[i];array[i] = array[j];array[j] = temp;}public static void QuickSortRun(){int[] array = { 2, 3, 5, 38, 19, 15, 26, 27, 36, 44, 47, 46, 50, 48, 4 };Sort(array, 0, array.Length - 1);Console.WriteLine("排序后结果:" + string.Join(", ", array));}}

C#堆排序算法

简介

堆排序是一种高效的排序算法,基于二叉堆数据结构实现。它具有稳定性、时间复杂度为O(nlogn)和空间复杂度为O(1)的特点。

详细文章描述

https://mp.weixin.qq.com/s/zS_ESKzlg05ICqFPIaePkg

代码实现

 public static void HeapSort(int[] array){int arrayLength = array.Length;//构建最大堆for (int i = arrayLength / 2 - 1; i >= 0; i--)Heapify(array, arrayLength, i);//依次取出堆顶元素,并重新调整堆for (int i = arrayLength - 1; i >= 0; i--){//将堆顶元素与当前最后一个元素交换int temp = array[0];array[0] = array[i];array[i] = temp;//重新调整堆Heapify(array, i, 0);}}private static void Heapify(int[] arr, int n, int i){int largest = i; //假设父节点最大int left = 2 * i + 1; //左子节点int right = 2 * i + 2; //右子节点//如果左子节点大于父节点,则更新最大值if (left < n && arr[left] > arr[largest])largest = left;//如果右子节点大于父节点和左子节点,则更新最大值if (right < n && arr[right] > arr[largest])largest = right;//如果最大值不是当前父节点,则交换父节点和最大值,并继续向下调整堆if (largest != i){int swap = arr[i];arr[i] = arr[largest];arr[largest] = swap;Heapify(arr, n, largest);}}public static void HeapSortRun(){int[] array = { 19, 27, 46, 48, 50, 2, 4, 44, 47, 36, 38, 15, 26, 5, 3, 99, 888, 0, -1 };Console.WriteLine("排序前数组:" + string.Join(", ", array));HeapSort(array);Console.WriteLine("排序后数组:" + string.Join(", ", array));}

C#计数排序算法

简介

计数排序是一种非比较性的排序算法,适用于排序一定范围内的整数。它的基本思想是通过统计每个元素的出现次数,然后根据元素的大小依次输出排序结果。

详细文章描述

https://mp.weixin.qq.com/s/PA5NNqcy3CM9PSncWCsmEg

代码实现

public static void CountingSort(int[] array){int arrayLength = array.Length;if (arrayLength <= 1) return;int min = array[0];int max = array[0];//找出最大值和最小值for (int i = 1; i < arrayLength; i++){if (array[i] < min) min = array[i];if (array[i] > max) max = array[i];}//统计每个元素出现的次数int[] count = new int[max - min + 1];//统计每个元素出现的次数for (int i = 0; i < arrayLength; i++){count[array[i] - min]++;}//根据count数组和min值确定每个元素的起始位置for (int i = 1; i < count.Length; i++){count[i] += count[i - 1];}//存储排序结果int[] temp = new int[arrayLength];//根据count数组和min值确定每个元素在temp数组中的位置for (int i = arrayLength - 1; i >= 0; i--){int index = count[array[i] - min] - 1;temp[index] = array[i];count[array[i] - min]--;}//将排序结果复制回原数组for (int i = 0; i < arrayLength; i++){array[i] = temp[i];}}public static void CountingSortRun(){int[] array = { 19, 27, 46, 48, 50, 2, 4, 44, 47, 36, 38, 15, 26, 5, 3, 99, 888};Console.WriteLine("排序前数组:" + string.Join(", ", array));CountingSort(array);Console.WriteLine("排序后数组:" + string.Join(", ", array));}

C#桶排序算法

简介

桶排序是一种线性时间复杂度的排序算法,它将待排序的数据分到有限数量的桶中,每个桶再进行单独排序,最后将所有桶中的数据按顺序依次取出,即可得到排序结果。

详细文章描述

https://mp.weixin.qq.com/s/YzviDcm3-4E5Wf2jooylJQ

代码实现

public static void BucketSort(int[] array){int arrLength = array.Length;if (arrLength <= 1){return;}//确定桶的数量int maxValue = array[0], minValue = array[0];for (int i = 1; i < arrLength; i++){if (array[i] > maxValue)maxValue = array[i];if (array[i] < minValue)minValue = array[i];}int bucketCount = (maxValue - minValue) / arrLength + 1;//创建桶并将数据放入桶中List<List<int>> buckets = new List<List<int>>(bucketCount);for (int i = 0; i < bucketCount; i++){buckets.Add(new List<int>());}for (int i = 0; i < arrLength; i++){int bucketIndex = (array[i] - minValue) / arrLength;buckets[bucketIndex].Add(array[i]);}//对每个非空的桶进行排序int index = 0;for (int i = 0; i < bucketCount; i++){if (buckets[i].Count == 0){continue;}int[] tempArr = buckets[i].ToArray();Array.Sort(tempArr);foreach (int num in tempArr){array[index++] = num;}}}public static void BucketSortRun(){int[] array = { 19, 27, 46, 48, 50, 2, 4, 44, 47, 36, 38, 15, 26, 5, 3, 99, 888};Console.WriteLine("排序前数组:" + string.Join(", ", array));BucketSort(array);Console.WriteLine("排序后数组:" + string.Join(", ", array));}

C#基数排序算法

简介

基数排序是一种非比较性排序算法,它通过将待排序的数据拆分成多个数字位进行排序。

详细文章描述

https://mp.weixin.qq.com/s/dCG-LLim4UGD1kIY2a3hmA

代码实现

public static void RadixSort(int[] array){if (array == null || array.Length < 2){return;}//获取数组中的最大值,确定排序的位数int max = GetMaxValue(array);//进行基数排序for (int exp = 1; max / exp > 0; exp *= 10){CountingSort(array, exp);}}private static void CountingSort(int[] array, int exp){int arrayLength = array.Length;int[] output = new int[arrayLength];int[] count = new int[10];//统计每个桶中的元素个数for (int i = 0; i < arrayLength; i++){count[(array[i] / exp) % 10]++;}//计算每个桶中最后一个元素的位置for (int i = 1; i < 10; i++){count[i] += count[i - 1];}//从原数组中取出元素,放入到输出数组中for (int i = arrayLength - 1; i >= 0; i--){output[count[(array[i] / exp) % 10] - 1] = array[i];count[(array[i] / exp) % 10]--;}//将输出数组复制回原数组for (int i = 0; i < arrayLength; i++){array[i] = output[i];}}private static int GetMaxValue(int[] arr){int max = arr[0];for (int i = 1; i < arr.Length; i++){if (arr[i] > max){max = arr[i];}}return max;}public static void RadixSortRun(){int[] array = { 19, 27, 46, 48, 99, 888, 50, 2, 4, 44, 47, 36, 38, 15, 26, 5, 3 };Console.WriteLine("排序前数组:" + string.Join(", ", array));RadixSort(array);Console.WriteLine("排序后数组:" + string.Join(", ", array));}

相关文章:

C#经典十大排序算法(完结)

C#冒泡排序算法 简介 冒泡排序算法是一种基础的排序算法&#xff0c;它的实现原理比较简单。核心思想是通过相邻元素的比较和交换来将最大&#xff08;或最小&#xff09;的元素逐步"冒泡"到数列的末尾。 详细文章描述 https://mp.weixin.qq.com/s/z_LPZ6QUFNJcw…...

C/C++文件操作(细节满满,part2)

该文章上一篇&#xff1a;C/C文件操作&#xff08;细节满满&#xff0c;part1&#xff09;_仍有未知等待探索的博客-CSDN博客 个人主页&#xff1a;仍有未知等待探索_C语言疑难,数据结构,小项目-CSDN博客 专题分栏&#xff1a;C语言疑难_仍有未知等待探索的博客-CSDN博客 目录 …...

web前端面试-- 手写原生Javascript方法(new、Object.create)

web面试题 本人是一个web前端开发工程师&#xff0c;主要是vue框架&#xff0c;整理了一些面试题&#xff0c;今后也会一直更新&#xff0c;有好题目的同学欢迎评论区分享 ;-&#xff09; web面试题专栏&#xff1a;点击此处 手动实现Object.create 通过Object.create&#…...

C++前缀和算法的应用:得到连续 K 个 1 的最少相邻交换次数 原理源码测试用例

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 滑动窗口 题目 给你一个整数数组 nums 和一个整数 k 。 nums 仅包含 0 和 1 。每一次移动&#xff0c;你可以选择 相邻 两个数字并将它们交换。 请你返回使 nums 中包…...

目标检测YOLO实战应用案例100讲-基于YOLOv5的航拍图像旋转目标检测

目录 前言 国内外研究历史与现状 目标检测技术的研究历史与现状...

H5前端开发——BOM

H5前端开发——BOM BOM&#xff08;Browser Object Model&#xff09;是指浏览器对象模型&#xff0c;它提供了一组对象和方法&#xff0c;用于与浏览器窗口进行交互。 通过 BOM 对象&#xff0c;开发人员可以操作浏览器窗口的行为和状态&#xff0c;实现与用户的交互和数据传…...

stable diffusion如何解决gradio外链无法开启的问题

问题确认 为了确认gradio开启不了是gradio库的问题还是stable diffusion的问题&#xff0c;可以先执行这样一段demo代码 import gradio as grdef greet(name):return "Hello " name "!"demo gr.Interface(fngreet, inputs"text", outputs&q…...

SpringMvc-面试用

一、SpringMvc常用注解 1、修饰在类的 RestController RequestMapping("/test")RestController是什么&#xff1f;其实是一个复合注解 Controller //其实就是Component ResponseBody //独立的注解 public interface RestController {}RequestMapping 也可以认…...

并发编程 # 3

文章目录 一、进程和线程的比较二、GIL全局解释器锁1.引入2.Python解释器的种类结论&#xff1a;在CPython解释其中&#xff0c;同一个进程下开启的多线程&#xff0c;同一时刻只能有一个线程执行&#xff0c;无法利用多核优势。得出结论&#xff1a;GIL锁就是保证在同一时刻只…...

ESP32C3 LuatOS TM1650①驱动测试

合宙TM1650驱动资料 TM1650.lua源码 引脚连接 TM1650ESP32C3SCLGPIO5SDAGPIO4 下载TM1650.lua源码&#xff0c;并以文件形式保存在项目文件夹中 驱动测试源码 --注意:因使用了sys.wait()所有api需要在协程中使用 -- 用法实例 PROJECT "ESP32C3_TM1650" VERSION …...

TCP为什么需要三次握手和四次挥手?

一、三次握手 三次握手&#xff08;Three-way Handshake&#xff09;其实就是指建立一个TCP连接时&#xff0c;需要客户端和服务器总共发送3个包 主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备 过程如下&#xff…...

【C++】一些C++11特性

C特性 1. 列表初始化1.1 {}初始化1.2 initializer_list 2. 声明2.1 auto2.2 typeid2.3 decltype2.4 nullptr 3. STL3.1 新容器3.2 新接口 4. 右值引用5. 移动构造与移动赋值6. lambda表达式7. 可变参数模板8. 包装器9. bind 1. 列表初始化 1.1 {}初始化 C11支持所有内置类型和…...

leetcode 647. 回文子串、516. 最长回文子序列

647. 回文子串 给你一个字符串 s &#xff0c;请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串&#xff0c;即使是由相同的字符组成&#…...

Vue Router 刷新当前页面

Vue项目, 在实际工作中, 有些时候需要在 加载完某些数据之后对当前页面进行刷新, 以期 onMounted 等生命周期函数, 或者 数据重新加载. 总之是期望页面可以重新加载一次. 目前总结有三种途径可实现以上需求: 一, reload 直接刷新页面 window.location.reload(); $router.go(…...

lstm 回归实战、 分类demo

预备知识 lstm 参数 输入、输出格式 nn.LSTM(input_dim&#xff0c;hidden_dim,num_layers); imput_dim 特征数 input:(样本数、seq, features_num) h0,c0 (num_layers&#xff0c;seq, hidden_num) output: (样本数、seq, hidden_dim) 再加一个全连接层&#xff0c;将 outpu…...

实践DDD模拟电商系统总结

目录 一、事件风暴 二、系统用例 三、领域上下文 四、架构设计 &#xff08;一&#xff09;六边形架构 &#xff08;二&#xff09;系统分层 五、系统实现 &#xff08;一&#xff09;项目结构 &#xff08;二&#xff09;提交订单功能实现 &#xff08;三&#xff0…...

`SQL`编写判断是否为工作日函数编写

SQL编写判断是否为工作日函数编写 最近的自己在写一些功能,遇到了对于工作日的判断,我就看了看sql,来吧!~(最近就是好疲惫) 我们一起看看(针对ORACLE) 1.声明: CREATE OR REPLACE PACKAGE GZYW_2109_1214.PKG_FUN_GETDAY_HDAY AS /** * 通过节假日代码获取指定的日期[查找基…...

零信任身份管理平台,构建下一代网络安全体系

随着数字化时代的到来&#xff0c;网络安全已成为企业和组织面临的一项重要挑战。传统的网络安全方法已经无法满足不断演变的威胁和技术环境。近期&#xff0c;中国信息通信研究院&#xff08;简称“中国信通院”&#xff09;发布了《零信任发展研究报告&#xff08; 2023 年&a…...

《数据结构、算法与应用C++语言描述》使用C++语言实现链表队列

《数据结构、算法与应用C语言描述》使用C语言实现链表队列 定义 队列的定义 队列&#xff08;queue&#xff09;是一个线性表&#xff0c;其插入和删除操作分别在表的不同端进行。插入元素的那一端称为队尾&#xff08;back或rear&#xff09;&#xff0c;删除元素的那一端称…...

RT-Thread学习笔记(四):RT-Thread Studio工具使用

RT-Thread Studio工具使用 官网详细资料实用操作1. 查看 RT-Thread RTOS API 文档2.打开已创建的工程3.添加头文件路径4. 如何设置生成hex文件5.新建工程 官网详细资料 RT-Thread Studio 用户手册 实用操作 1. 查看 RT-Thread RTOS API 文档 2.打开已创建的工程 如果打开项目…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...