双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

程序逻辑与算法2_聂浩

嘘嘘喵 嘘嘘喵 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

9.27

工作内容

任务4.1.3 对数组[8, 2, 11, 9, 1, 5, 3]使用二分算法进行排序

package com.xxm.task4;

import java.util.Arrays;

//用递归的方法实现二分合并排序

/*思路,两个函数,
第一个:归并排序函数mergeSort,在mergeSort函数中引用merge。
第二个:有序合并函数merge。作用是有序地合并两个有序序列。
 */


public class quest2_3_BinaryMergeSort {
    //第一步,先写出有序合并函数merge

    public static void merge(int arr[], int low, int mid, int high) {
        /*
        变量解释:
        low是待合并的第一个数组的起点(在数组arr中的索引);
        mid-1是第一个数组的终点,因此mid是第二个数组的起点
        high是第二个数组的终点。
        因此第一个数组的长度为(mid - low)
        第二个数组的长度为(high - mid + 1 )
         */
        int i = 0;//定义计数器
        int[] lowArr = new int[mid - low];
        int[] highArr = new int[high - mid + 1];   //定义两数组的长度。
        for (i = low; i < mid; i++) {      //这两个for循环用来定义左右数组
            lowArr[i - low] = arr[i];  // lowArr的第一个变量即arr[low]
        }
        for (i = mid; i <= high; i++) {
            highArr[i - mid] = arr[i];
        }
        //接下来是完成两数组的排序合并
        i = 0;    //计数器置零,作为左数组计数器
        int j = 0;   //作为右数组的计数器
        int k = low;    //传入数组的位置计数器
        while (i < mid - low && j < high - mid + 1) {    //当左右两数列的计数器仍在其长度范围内时才执行,否则退出循环
            if (lowArr[i] < highArr[j]) {
                arr[k++] = lowArr[i++];
            } else {
                arr[k++] = highArr[j++]; //赋值完后自增
            }
        }
        //上面循环结束后,还有数据未处理,将其直接放在后面
        while (i < mid - low) {
            arr[k++] = lowArr[i++];
        }
        while (j < high - mid + 1) {
            arr[k++] = highArr[j++];
        }
    }

    //第二步:写递归二分归并函数

    public static void mergeSort(int arr[], int low, int high) {
        if (low < high) {    //low=high时,代表达到了递归最底层,执行合并
            int mid = (low + high) / 2; //定义mid,将传入数组分成两部分
            mergeSort(arr, low, mid);   //迭代,处理左边的数组
            mergeSort(arr, mid + 1, high);  //迭代,处理右边的数组
            merge(arr, low, mid+1, high);    //最底层,调用merge函数完成排序。
        }
    }

    //第三步:主程序,调用mergeSort函数,并输出数组
    public static void main(String[] args) {
        int arr[] = new int[]{8, 2, 11, 9, 1, 5, 3};
        mergeSort(arr, 0, arr.length - 1);
        System.out.println(Arrays.toString(arr));
    }

}

这是今天的主要工作内容

C1任务24-1

使 div.box2 定位在 div.box1 上方,横线处可填写的最大整型数字是

答:z-index表示z轴,很好理解。而z-index值相同时,后面代码的内容会覆盖前面的,所以最多填9。

C1任务24-2

使类名为 top 的 div 定位在类名为 bottom 的 div 上方,横线处可填写的最小整数是?

答:同理,10 

C1任务24-3

现要求“Hello,World!”文本相对于 div 向左偏移 20px,显示效果如下图,请补全代码片段

答:left用于非static元素,意为规定元素左边框与其父元素(本题中是灰色框框)左边框之间的偏移量,左为负右为正。因此应该填-20。

C1任务25

现要求将 main 中的 section 元素在一行排列,请补全代码片段。

答:浮动即可,应填float。

 

知识学习

算法可视化学习

冒泡排序

原理:遍历数组,比较两个相邻数据,如果其大小位置不对则交换其位置,并且继续遍历,遍历完一轮数组之后则完成一次冒泡。重复若干次之后冒泡排序就完成了。

以数组 int []arr= new int[ ]{3,38,5,47,15,36,27,2,4,19} 为例。

要用到的变量、计数器

i:交换循环的计数器

len:未排序数组的长度计数器初始值为arr.length,每完成一轮冒泡,len--

第一个循环:从第i个数开始(i=0,第0个数据是3

比较第i个数和第i+1个数,

  1. 如果arr[i] > arr[i+1],则交换两数位置,然后i++。
  2. 如果arr[i] <= arr[i+1],不做操作,然后i++。

重复这个循环,直到i>= len -1。说明这一轮冒泡完成,然后len--。

开始进入第二个循环。并不断重复,直到len=0,说明冒泡排序完成。

插入排序

已排序数组长度计数器:len

原理:

第一步:将第一个数标记为已排序。len=1

第二步:选取第i个数(初始i=1),将其与已排序数列的倒数第 j+1 (初始 j =0)个数比较,如果

arr[ i ] < arr[ len - j ],则将第 j 个数往后移动一格,然后j++,再重复第二步。直到arr[ i ] > arr[ j ]。

第三步:第二步后,如果arr[ i ] > arr[ len - j ],此时直接将arr[ i ] 插入在arr[ len - j ]的位置,然后i++。

 

然后一直循环第二、第三步。直到 i = length.arr,排序完成。

 

快速排序

原理:

1.选取一个数作为轴心点(一般选未排序序列的左边第一个数)

2.遍历比较,把大于轴心点数字的数放在轴心点左边,把大于轴心点的数放在轴心点右边。

3.对左右子序列重复前两步,直到所有子序列长度都为1。

 

归并排序

原理:

1、将序列中数字分成若干组,每个数字为一组。

2、将组两两合并,保证合并后的组是有序的。(比较两组的头部,把小的取出来放第一个,以此类推)

3、重复1、2,直至只剩下一组。

知识点

toString方法

作用:将对象转为字符串。

 

明日计划

1、把递归版本的和数分解搞定(今天最后都没搞完)。

2、学习回调,用回调完成规定的3个任务。

3、通过算法可视化工具,熟悉堆排序以及各种查找。

...全文

相关推荐

基于在线词典的人脸超分辨率

基于在线词典的人脸超分辨率

weixin_38627826

douyin-favorite-MyLike-main.zip

douyin-favorite-MyLike-main.zip

2606_97419394

风光储虚拟同步VSG并离网切换预同步控制仿真(Simulink仿真实现)

内容概要:本文针对风光储混合微电网系统,深入研究了虚拟同步发电机(VSG)技术在并网与离网两种运行模式间进行切换时的关键控制策略——预同步控制,并基于Simulink平台构建了完整的系统仿真模型以验证该策略的有效性。该模型集成了风力发电、光伏发电和储能系统,通过VSG控制算法赋予电力电子逆变器类似于传统同步发电机的惯性和阻尼特性,从而显著增强了微电网在模式切换过程中的动态稳定性与鲁棒性。其中,预同步控制环节是实现无缝切换的核心,它通过实时调节VSG输出电压的频率、相位和幅值,使其在并网开关动作前就与主电网的电压参数达到高度一致,有效消除了并网冲击电流,实现了平滑、无扰动的模式转换。通过仿真结果,可以系统地分析和优化控制器的各项参数,进而验证该整体控制方案的技术可行性与优越性能。; 适合人群:具备电力电子技术、自动控制理论和电力系统基础的专业知识,从事新能源发电、微电网运行与控制、电力系统自动化等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究风光储一体化混合微电网的能量管理策略与并离网无缝切换控制技术;②深入学习和掌握虚拟同步机(VSG)的工作原理、数学建模及其在逆变器控制中的具体实现方法;③利用Simulink进行复杂的电力系统动态仿真,以验证和评估新型控制算法的动态响应特性和有效性。; 阅读建议:此资源以Simulink仿真为核心实践工具,使用者应紧密结合电力系统的基础理论知识,深入理解VSG的数学模型和控制逻辑,尤其要重点关注预同步环节的控制策略设计,并通过反复调整仿真模型中的各项参数来观察系统的动态响应变化,从而深化对微电网稳定运行机制和高级控制技术的理解。

天天程序猿

【顶级EI复现】新扩展移相角下的双有源桥DC-DC 变换器优化控制策略(Simulink仿真实现)

内容概要:本文聚焦于“新扩展移相角下的双有源桥DC-DC变换器优化控制策略”的研究与仿真实现,基于Simulink平台系统地构建了完整的仿真模型,深入探讨了软开关实现、最小电流应力优化及闭环控制策略的设计方法。文章提出一种改进型扩展移相(EPS)调制策略,通过引入扩展移相角有效拓宽软开关范围,提升变换效率并降低功率器件的电压与电流应力。结合KKT最优性条件与分段解析优化理论,实现了软开关与最小应力的协同控制目标,并设计双闭环控制系统以增强动态响应与鲁棒性。研究成果成功复现了高水平EI期刊论文的核心思想,具有较强的学术参考价值与工程应用意义。; 适合人群:电力电子、电气工程及其自动化等方向的研究生、科研人员,以及具备一定Simulink建模能力与电力电子拓扑控制基础的工程技术人员。; 使用场景及目标:①深入理解双有源桥(DAB)变换器的工作机理与先进控制策略;②掌握基于KKT条件的优化控制建模方法;③在Simulink中复现并验证EI级论文提出的控制算法,服务于科研论文撰写、课题研究或实际项目开发; 阅读建议:建议结合文中涉及的EPS调制、软开关条件推导、KKT优化数学建模等内容进行系统学习,重点关注仿真模块的参数设置、控制逻辑实现与波形分析,以全面掌握该优化策略的技术细节与工程实现路径。

优化算法侠_科研

AI大模型医学影像诊断智能识别应用方案.pptx

AI大模型医学影像诊断智能识别应用方案.pptx

公众号:优享智库
评论
收藏 已收藏
分享
返回顶部
嘘嘘喵
CSDN实训 110 成员 353 内容