maven构建项目踩坑整理

news/2025/2/11 14:42:55/文章来源:https://www.cnblogs.com/wxdxb/p/18709704

1.冒泡排序

​ 从第一个元素开始,比较相邻的两个元素,顺序错误便交换位置,重复上面步骤,遍历完整个数组后,最大的元素已经移动到末尾,下一轮便可少比较一个元素。

​ 当一轮遍历中没有发生任何交换时,说明数组有序,可以提前终止排序过程。

​ 最好O(n),最差O(n^2)

public static void bubbleSortOpt(int[] arr) {if(arr.length < 2 || arr == null) {return;}int temp = 0;for(int i = 0; i < arr.length - 1; i++) {for(int j = 0; j < arr.length - i - 1; j++) {if(arr[j] > arr[j + 1]) {temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}for (int a = 0; a < arr.length; a++) {System.out.print(arr[a]+" ");}System.out.println();}
}/**
输入:{3,6,2,7,5,9}3 2 6 5 7 9 
2 3 5 6 7 9 
2 3 5 6 7 9 
2 3 5 6 7 9 
2 3 5 6 7 9 
*/

2.快速排序

从数组中随机挑选一个元素作为基准,所有比基准元素小的元素放在基准元素前面,大的放在后面。然后递归的将左边和右边两个子数组进行排序。平均时间复杂度为O(n logn),最坏时间复杂度为O(n^2)

public void quicksort(int[] arr, int start, int end) {if(start < end) {// 把数组中的首位数字作为基准数int stard = arr[start];// 记录需要排序的下标int low = start;int high = end;// 循环找到比基准数大的数和比基准数小的数while(low < high) {// 右边的数字比基准数大while(low < high && arr[high] >= stard) {high--;}// 使用右边的数替换左边的数arr[low] = arr[high];// 左边的数字比基准数小while(low < high && arr[low] <= stard) {low++;}// 使用左边的数替换右边的数arr[high] = arr[low];}// 把标准值赋给下标重合的位置arr[low] = stard;// 处理所有小的数字quickSort(arr, start, low);// 处理所有大的数字quickSort(arr, low + 1, end);}
}

3.插入排序

将数组的一个元素视为以排序部分,其余为未排序部分,从未排序部分选择一个元素,插入已排序部分的正确位置。为了插入,将已排序部分中大于待插入元素向右移动一个位置。最好是O(n),最坏时间复杂度为O(n^2)。

插入排序在数据有序时效率最高。

public void insertSort(int[] arr) {// 遍历所有数字for(int i = 1; i < arr.length - 1; i++) {// 当前数字比前一个数字小if(arr[i] < arr[i - 1]) {int j;// 把当前遍历的数字保存起来int temp = arr[i];for(j = i - 1; j >= 0 && arr[j] > temp; j--) {// 前一个数字赋给后一个数字arr[j + 1] = arr[j];}// 把临时变量赋给不满足条件的后一个元素arr[j + 1] = temp;}}
}

4.希尔排序

将数据分按照一定间隔分为若干组,对每组的 元素进行插入排序,完成一组后,间隔减半,直到间隔为1。平均时间复杂度为O(n logn),最坏时间复杂度为O(n^2)

public void shellSort(int[] arr) {// gap 为步长,每次减为原来的一半。for (int gap = arr.length / 2; gap > 0; gap /= 2) {// 对每一组都执行直接插入排序for (int i = 0 ;i < gap; i++) {// 对本组数据执行直接插入排序for (int j = i + gap; j < arr.length; j += gap) {// 如果 a[j] < a[j-gap],则寻找 a[j] 位置,并将后面数据的位置都后移if (arr[j] < arr[j - gap]) {int k;int temp = arr[j];for (k = j - gap; k >= 0 && arr[k] > temp; k -= gap) {arr[k + gap] = arr[k];}arr[k + gap] = temp;}}}}
}

5.选择排序

每次从未排序的选出最大或者最小的,与当前元素交换位置。最坏和平均都为O(n²),空间复杂度为O(1)。

public void selectSort(int[] arr) {// 遍历所有的数for (int i = 0; i < arr.length; i++) {int minIndex = i;// 把当前遍历的数和后面所有的数进行比较,并记录下最小的数的下标for (int j = i + 1; j < arr.length; j++) {if (arr[j] < arr[minIndex]) {// 记录最小的数的下标minIndex = j;}}// 如果最小的数和当前遍历的下标不一致,则交换if (i != minIndex) {int temp = arr[i];arr[i] = arr[minIndex];arr[minIndex] = temp;}}
}

6.堆排序

堆排序不稳定

/*** 转化为大顶堆* @param arr 待转化的数组* @param size 待调整的区间长度* @param index 结点下标*/
public void maxHeap(int[] arr, int size, int index) {// 左子结点int leftNode = 2 * index + 1;// 右子结点int rightNode = 2 * index + 2;int max = index;// 和两个子结点分别对比,找出最大的结点if (leftNode < size && arr[leftNode] > arr[max]) {max = leftNode;}if (rightNode < size && arr[rightNode] > arr[max]) {max = rightNode;}// 交换位置if (max != index) {int temp = arr[index];arr[index] = arr[max];arr[max] = temp;// 因为交换位置后有可能使子树不满足大顶堆条件,所以要对子树进行调整maxHeap(arr, size, max);}
}/*** 堆排序* @param arr 待排序的整型数组*/
public static void heapSort(int[] arr) {// 开始位置是最后一个非叶子结点,即最后一个结点的父结点int start = (arr.length - 1) / 2;// 调整为大顶堆for (int i = start; i >= 0; i--) {SortTools.maxHeap(arr, arr.length, i);}// 先把数组中第 0 个位置的数和堆中最后一个数交换位置,再把前面的处理为大顶堆for (int i = arr.length - 1; i > 0; i--) {int temp = arr[0];arr[0] = arr[i];arr[i] = temp;maxHeap(arr, i, 0);}
}

7.归并排序

将数组分为两个子数组,分别对子数组调用归并排序,好最坏时间复杂度都相同O(n logn)

https://mp.weixin.qq.com/s?__biz=MzAxMjY5NDU2Ng==&mid=2651862169&idx=1&sn=e011e79ff77736dfb389084bb3a20d37&chksm=804971d0b73ef8c649d7c9b08706f3c33b0e10c3935e24982337b05d69f1487ace072fbd48d9&scene=27

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

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

相关文章

Linux Android 下的内存注入手段

ptrace_inject_mem long ptrace(enum __ptrace_request request, pid_t pid,void *addr, void *data);请求 (Request) 值 说明PTRACE_TRACEME 0 使调用进程变为被跟踪进程。在子进程调用 ptrace(PTRACE_TRACEME, ...) 后,父进程可以使用 PTRACE_ATTACH 进行跟踪。PTRACE_PEEKT…

解决 idea 无法创建java8 模版

解决 idea 无法创建java8 模版由于 Spring 官方不再维护 旧的版本了导致的 https://start.spring.io 解决方式很简单 切换到 阿里源就可以了 https://start.aliyun.com/ 项目生成 成功总结 :IDEA 内置的 Spring Initializr 创建 Spring Boot 项目实际上是依赖官方链接功能,官…

高性价比云服务新选择

在数字化转型加速的当下,寻找稳定可靠的云服务成为许多用户的刚需。深度测试,3丰云平台提供的免费云服务器**展现出超出预期的实用性,现将其核心优势整理如下: 一、零门槛云资源获取 通过官网([https://www.sanfengyun.com)的清晰引导,用户可快速完成注册并开通免费云服…

MySQL索引、MVCC、锁问题

一、MySQL索引 1.1.索引简介 索引是一种数据库中的数据对象,它能够提高数据库中的数据检索速度.MySQL支持多种类型的索引,每种类型的索引有其特定的用途和性能特点. MySQL中的索引种类如下:B-Tree索引 数据结构B-Tree 根据叶子结点的存储数据的种类不同分为:聚簇索引(主键索引)…

OpenEuler部署DM8主备复制集群

DM8、主备复制案例说明: 在OpenEuler系统上部署DM8的主备复制架构。 系统环境: [root@node209 dm]# cat /etc/os-release NAME="openEuler" VERSION="20.03 (LTS-SP4)" ID="openEuler" VERSION_ID="20.03" PRETTY_NAME="openEu…

OpenEuler部署DM8主备复制

DM8、主备复制案例说明: 在OpenEuler系统上部署DM8的主备复制架构。 系统环境: [root@node209 dm]# cat /etc/os-release NAME="openEuler" VERSION="20.03 (LTS-SP4)" ID="openEuler" VERSION_ID="20.03" PRETTY_NAME="openEu…

对称密码算法

1. 定义 对称密码算法加密过程与解密过程使用相同的或容易相互推导得出的密钥,即加密和解密两方的密钥是“对称”的 2. 加解密流程用户通过加密算法将明文变换为密文。密文的具体值由密钥和加密算法共同决定。只有掌握了同一个密钥和对应解密算法的用户才可以将密文逆变换为有…

SaaS+AI应用架构:业务场景、智能体、大模型、知识库、传统工具系统

大家好,我是汤师爷~ 在SaaS与AI应用的演进过程中,合理的架构设计至关重要。本节将详细介绍其五个核心层次:业务场景层:发现和确定业务场景 智能体层:构建可复用的智能应用 大模型层:采用最合适的大模型,作为思考推理的核心 知识库:管理企业的核心知识资产 传统工具:传…

50N06-ASEMI吹风筒专用MOS管50N06

50N06-ASEMI吹风筒专用MOS管50N06编辑:ll 50N06-ASEMI吹风筒专用MOS管50N06 型号:50N06 品牌:ASEMI 封装:TO-252 最大漏源电流:50A 漏源击穿电压:60V 批号:最新 RDS(ON)Max:15mΩ 引脚数量:3 沟道类型:N沟道MOS管 芯片尺寸:MIL 漏电流: 恢复时间:ns 芯片材质: …

瑞芯微开发板/主板Android调试串口配置为普通串口方法

本文介绍瑞芯微开发板/主板Android调试串口配置为普通串口方法,不同板型找到对应文件修改,修改的方法相通。触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。…

Ubuntu22.04 搭建离线APT源(apt-mirror)

1、应用场景 目前需要在Linux环境下做UE开发,Ubuntu版本使用的是22.04。项目现场是没法连到外网的,所以安装库十分不方便,所以需要搭建一套内网的离线APT源。 2、搭建步骤 2.1 资源拉取 首先需要在联网机器上将资源拉取到本地。 本教程使用使用apt-mirror拉取镜像源,使用ng…

013 Promise对象_Ajax实操

Promise封装Ajax,让网络请求的异步操作变得更简单<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><titl…