常见排序算法(Java代码实现)

前言

学习算法和数据结构必备算法逻辑动态演示网站,收藏到就是赚到,链接: 数据结构动态演示网站
下面的代码单独理解会比较抽象,建议结合动态演示学习,更加直观

常见排序算法(时间复杂度)

O(n^2):冒泡排序、插入排序、选择排序
O(nlogn):归并排序、快速排序

1、冒泡排序

冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求,如果不满足则让它两个交换

public static void MaoPaoSort(int[] numbers){int length = numbers.length;int temp;for (int i = 0; i < length; i++) {for (int j = 0; j < length-i-1; j++){if (numbers[j]>numbers[j+1]){temp = numbers[j];numbers[j] = numbers[j+1];numbers[j+1] = temp;}}}
}

2、插入排序

插入排序将数组数据分成已排序区间和未排序区间。初始已排序区间只有一个元素,即数组第一个元素。在未排序区间取出一个元素插入到已排序区间的合适位置,直到未排序区间为空。

public static void insertSort(int[] numbers){int length = numbers.length;for (int i = 1; i < length; i++) {int j = i-1;int value = numbers[i];for (; j>=0; j--){if (numbers[j] > value){numbers[j+1] = numbers[j];}else{break;}}numbers[j+1] = value;}
}

3、选择排序

选择排序将数组分成已排序区间和未排序区间。初始已排序区间为空。每次从未排序区间中选出最小的元素插入已排序区间的末尾,直到未排序区间为空。

public static void selectSort(int[] numbers){int length = numbers.length;int temp;for (int i = 0; i < length; i++) {for (int j = i+1; j < length; j++){if (numbers[i] > numbers[j]){temp = numbers[i];numbers[i]  = numbers[j];numbers[j] = temp;}}}
}

4、归并排序

如果要排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。

public static void mergeSort(int[] numbers,int left,int right){if (left>=right){return;}int middle = (left+right)/2;mergeSort(numbers,left,middle);mergeSort(numbers,middle+1,right);mergeSortTemp(numbers,left,middle,right);
}
//归并排序工具类
private static void mergeSortTemp(int[] numbers, int left, int middle, int right) {int[] temps = new int[right-left+1];int tempsSize=0;int left0 = left;int left1 = middle+1;while (left0<=middle && left1<=right){if (numbers[left0]<=numbers[left1]){temps[tempsSize++] = numbers[left0++];}else{temps[tempsSize++] = numbers[left1++];}}while (left0 <= middle){temps[tempsSize++] = numbers[left0++];}while(left1 <= right){temps[tempsSize++] = numbers[left1++];}for (int i = 0; i <= right - left; i++) {numbers[left+i] = temps[i];}
}

5、快速排序

如果要排序数组中下标从p到r之间的一组数据,我们选择p到r之间的任意一个数据作为pivot (分区点) 。我们遍历p到r之间的数据,将小于pivot的放到左边,将大于pivot的放到右边,将pivot放到中间。经过这一步骤之后,数组p到r之间的数据就被分成了三个部分,前面p到q-1之间都是小于pivot的,中间是pivot,后面的q+1到r之间是大于pivot的。

public static void quickSort(int[] numbers,int left,int right){if (left > right){return;}int i = left;int j = right;int base = numbers[left];while(i != j){while(numbers[j]>=base && i<j){j--;}while(numbers[i]<=base && i<j){i++;}int temp;temp = numbers[i];numbers[i] = numbers[j];numbers[j] = temp;}numbers[left] = numbers[i];numbers[i] = base;quickSort(numbers,left,i-1);quickSort(numbers,i+1,right);}

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

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

相关文章

【Nginx】(三) Nginx配置文件精解:从入门到精通的完整指南

Nginx&#xff0c;作为一款功能强大的 Web 服务器和反向代理软件&#xff0c;已经成为实现这些目标的行业标准。然而&#xff0c;Nginx的强大功能往往伴随着复杂的配置需求。对于想快速掌握 Nginx 配置的人来说&#xff0c;理解其配置文件的结构至关重要。 在本文中&#xff0…

RabbitMQ笔记(基础篇)

视频&#xff1a; MQ基础-01.RabbitMQ课程介绍_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1mN4y1Z7t9?p1&vd_sourced0ea58f1127eed138a4ba5421c577eb1 一、RabbitMQ简介 1.同步调用 优势&#xff1a;时效性强&#xff0c;等待结果后才返回 劣势&#xff1…

虚拟化与Docker基本概念与Docker的安装

Docker Docker 是一个开源的应用容器引擎&#xff0c;它最初是用 Go 语言开发的。Docker 允许开发者将应用程序及其依赖、库和环境打包到一个可移植的容器中&#xff0c;这个容器可以在任何支持 Docker 的 Linux 或 Windows 机器上运行&#xff0c;保证了应用在不同环境之间的…

【行为型模式】备忘录模式

一、备忘录模式概述 备忘录模式定义&#xff1a;又称之为快照模式(Snapshop Pattern)或者令牌模式(Token Pattern)&#xff0c;是指在不破坏封装的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在对象之外保存这个状态&#xff0c;这样我们就可以在需要的时候将该对…

STM32几种库的比较,HAL、标准库、LL库!

STM32是一系列由STMicroelectronics公司生产的微控制器系列。它们基于ARM Cortex-M内核&#xff0c;提供了广泛的性能和功能。STM32系列拥有多个型号和系列&#xff0c;每个型号都有不同的特性和功能。 STMicroelectronics提供了名为STM32Cube的软件生态系统&#xff0c;其中包…

【14-Ⅱ】Head First Java 学习笔记

HeadFirst Java 本人有C语言基础&#xff0c;通过阅读Java廖雪峰网站&#xff0c;简单速成了java&#xff0c;但对其中一些入门概念有所疏漏&#xff0c;阅读本书以弥补。 第一章 Java入门 第二章 面向对象 第三章 变量 第四章 方法操作实例变量 第五章 程序实战 第六章 Java…

InstantMesh:利用稀疏视图大规模重建模型从单张图像高效生成3D网格

作者&#xff1a;Jiale Xu&#xff0c;Weihao Cheng&#xff0c;Yiming Gao等 编译&#xff1a;东岸因为一点人工一点智能 InstantMesh&#xff1a;利用稀疏视图大规模重建模型从单张图像高效生成3D网格在这项工作中&#xff0c;我们提出了InstantMesh&#xff0c;一个开源的…

【C语言】红黑树详解以及C语言模拟

一、红黑树的性质二、红黑树的旋转操作三、红黑树的插入操作四、红黑树的删除操作五、红黑树的应用六、C语言模拟红黑树七、总结 红黑树是一种自平衡二叉查找树&#xff0c;它能够保持树的平衡&#xff0c;从而确保查找、插入和删除的最坏情况时间复杂度为O( l o g n log_n log…

批量控制教程-Ansible管理windows

背景 你厌恶要手动操作多台机器进行某些重复的操作吗&#xff1f;想象一下&#xff0c;在周五的晚上你想要下班了&#xff0c;但是你得在很多台机器手动发布一些东西&#xff0c;每台机器都要整半小时&#xff0c;整整8台机器&#xff0c;一晚上几个小时可以预见又没了。 ans…

LoRA: 大模型的低秩适配

笔记整理&#xff1a;陈一林&#xff0c;东南大学硕士&#xff0c;研究方向为不确定知识图谱规则学习 链接&#xff1a;https://arxiv.org/abs/2106.09685 1、动机 自然语言处理的一个重要范式包括在通用领域数据上进行大规模预训练&#xff0c;然后对特定任务或领域进行适应性…

CentOS命令大全

系统信息查询命令 在CentOS系统中&#xff0c;了解如何查询系统信息对于系统管理和性能监控至关重要。以下是一些基本而强大的命令&#xff0c;用于获取关于您的系统的各种信息。 1. uname - 获取系统信息 uname命令用于打印系统信息&#xff0c;例如内核版本、主机名等。使…

python之schedule

在Python中&#xff0c;可以使用schedule模块来执行定时任务。这个模块提供了简单易用的API&#xff0c;可以让你按照指定的时间间隔或特定时间点执行函数或任务。 首先&#xff0c;需要使用pip安装schedule模块&#xff1a; pip install schedule下面是一个简单的例子&#…

JAVA10迭代更新

文章目录 1 概述2 语法层次的变化1_局部变量的类型推断 3 API层次的变化1_集合中新增copyOf创建只读集合2_Optional 新增了orElseThrow方法 4 其他1_垃圾回收器接口2_G1 并行 Full GC3_应用程序类数据共享(扩展 CDS 功能)4_实验性的基于 Java 的 JIT 编译器 1 概述 2018年3月21…

新能源汽车小米su7

小米su7汽车 function init() {const container document.querySelector( #container );camera new THREE.PerspectiveCamera( 20, window.innerWidth / window.innerHeight, 1, 50000 );camera.position.set( 0, 700, 7000 );scene new THREE.Scene();scene.background ne…

vue项目中基于fabric 插件实现涂鸦画布功能

vue项目中基于fabric 插件实现涂鸦画布功能 一、效果图二、安装依赖三、main.js引入四、主要代码 一、效果图 二、安装依赖 npm install fabric 三、main.js引入 import fabric from fabric Vue.use(fabric);四、主要代码 //封装成了一个组件 <template><el-dialogt…

Java中static关键字的使用与练习

Java中static关键字的使用与练习 在Java编程中&#xff0c;static关键字是一个非常重要的概念&#xff0c;它用于修饰类的成员变量和方法。通过static关键字&#xff0c;我们可以创建与类本身关联而不是与类的实例关联的成员。下面&#xff0c;我们将详细探讨static关键字在Ja…

FlashSpeech、ID-Animator、TalkingGaussian、FlowMap、CutDiffusion

本文首发于公众号&#xff1a;机器感知 FlashSpeech、ID-Animator、TalkingGaussian、FlowMap、CutDiffusion Gradient Guidance for Diffusion Models: An Optimization Perspective Diffusion models have demonstrated empirical successes in various applications and ca…

C语言中的指针常量的常量指针

指针常量和常量指针是C/C编程语言中两个重要的概念&#xff0c;它们都与指针有关&#xff0c;但具有不同的含义和用途。 1. 指针常量&#xff08;Pointer to Constant&#xff09; 指针常量指的是一个指针的值&#xff08;即它所指向的地址&#xff09;在初始化之后不能再被改…

《MATLAB科研绘图与学术图表绘制从入门到精通》示例:绘制婴儿性别比例饼图

在MATLAB 中可以使用 pie 函数来创建饼图。饼图是一种展示不同部分占总体的相对比例的图表。 本示例从“婴儿出生数据.csv”文件读取婴儿出生数据&#xff0c;然后计算男性和女性婴儿的数量&#xff0c;使用MATLAB绘制饼图。 配套图书链接&#xff1a;https://item.jd.com…

Unity 帧同步游戏解决方案梳理

帧同步游戏解决方案梳理 一、保证所有客户端的计算结果一致二、帧同步手感优化&#xff1a;三、不同步问题总结&#xff1a;四、帧同步优化&#xff1a; 一、保证所有客户端的计算结果一致 保证所有客户端的计算结果一致 1、逻辑与显示分离 逻辑控制显示&#xff0c;而显示的执…