**主要内容为(快排、插入排序、选择排序、冒泡、希尔排序、堆排序、归并排序),最下方有swap函数和测试代码(自行根据函数名替换排序算法即可)。**
**快排**————————————————————————————
public static void quicksort(int[] arr,int low,int high){
int tmp;
if(low>=high)return ;
int tag=arr[low];
int left=low;
int right=high;
while(left<right){
while(right>left&&arr[right]>=tag){
right--;
}
while(left<right&&arr[left]<=tag){
left++;
}
if(left<right){
tmp=arr[left];
arr[left]=arr[right];
arr[right]=tmp;
}
}
arr[low]=arr[left];
arr[left]=tag;
quicksort(arr,low,right-1);
quicksort(arr,right+1,high);
}
————————————————————————————————
**插入排序**——————————————————————————
public static void insertsort(int[] arr){
int i;
int j;
for(i=1;i<arr.length;i++){
if(arr[i]<arr[i-1]){
int tmp=arr[i];
for(j=i-1;j>=0&&arr[j]>tmp;j--){
arr[j+1]=arr[j];
}
arr[j+1]=tmp;
}
}
————————————————————————————————————————
**选择排序**——————————————————————————————————
selectsort
public static void selectionsort(int[] arr){
for(int i=0;i<arr.length;i++){
int min=i;
for(int j=i+1;j<arr.length;j++){
if(arr[j]<arr[min])
min=j;
}
if(min!=i){
int tmp=arr[i];
arr[i]=arr[min];
arr[min]=tmp;
}
}
}
——————————————————————————————————————————
**冒泡**————————————————————————————————————————
public static void bubblesort(int[] arr){
for(int i=0;i<arr.length;i++){
boolean flag=true;
for(int j=0;j<arr.length-i-1;j++){
if(arr[j]>arr[j+1]){
swap(arr,j,j+1);
flag=false;
}
}
if(flag)
break;
}
}
——————————————————————————————————————————
**希尔排序**——————————————————————————————————
//shellsort
public static void shellsort(int[] arr){
for(int gap=arr.length/2;gap>=1;gap=gap/2){
for(int i=gap;i<arr.length;i++){
int j=i;
//method1 by swap
/* while(j>=gap&&arr[j]<arr[j-gap]){
swap(arr,j,j-gap);
j-=gap;
}*/
//method2 by move
int tmp=arr[i];
while(j>=gap&&arr[j-gap]>tmp){
arr[j]=arr[j-gap];
j-=gap;
}
arr[j]=tmp;
}
}
}
————————————————————————————————————————
**堆排序**————————————————————————————————————
//heapsort
public static void heapsort(int[] arr){
//1.build tree
for(int i =arr.length/2-1;i>=0;i--){
adjust(arr,i,arr.length);
}
for(int j=arr.length-1;j>0;j--){
swap(arr,0,j);
adjust(arr,0,j); //因为开始建堆时调整使用的是arr.length ,此时j为减一后的“长度”,所以之后均为j即可。
}
}
public static void adjust(int[] arr,int i,int length){
int tmp=arr[i];
for(int j=2*i+1;j<length;j=2*j+1){
if(j+1<length&&arr[j]<arr[j+1]){
j++;
}
if(arr[j]>tmp){
arr[i]=arr[j];
i=j;
}
else{
break;
}
}
arr[i]=tmp;
}
————————————————————————————————————————————
**归并排序**————————————————————————————————————
//mergesort
public static void mergesort(int[] arr){
int[] tmp=new int[arr.length];
sort(arr,0,arr.length-1,tmp);
}
public static void sort(int[]arr,int low,int high,int[] tmp){
if(low>=high)return;
int middle=(low+high)/2;
sort(arr,low,middle,tmp);
sort(arr,middle+1,high,tmp);
merge(arr,low,middle,high,tmp);
}
public static void merge(int[] arr,int low,int middle,int high,int[] tmp){
int a,b,c;
a=low;
b=middle+1;
c=low;
while(a<=middle&&b<=high){
if(arr[a]>arr[b])
{
tmp[c++]=arr[b++];
}
else{
tmp[c++]=arr[a++];
}
}
while(a<=middle){
tmp[c++]=arr[a++];
}
while(b<=high){
tmp[c++]=arr[b++];
}
while(low<=high){
arr[low]=tmp[low];
low++;
}
}
————————————————————————————————————————————
交换函数swap
public static void swap(int[]arr,int a,int b){
arr[a]=arr[a]+arr[b];
arr[b]=arr[a]-arr[b];
arr[a]=arr[a]-arr[b];
}
测试代码
public static void main(String[] args){
int[] arr = {10,7,2,4,7,62,3,4,2,1,8,9,19};
//1 2 2 3 4 4 7 7 8 9 10 19 62
// int[] arr = {1,2,3,8,99,54,0,6,8,10,11,15,20};
mergesort(arr);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
*本文旨在方便查询浏览,欢迎指正。*
相关推荐
各种排序算法合集
各种排序算法合集,每种排序算法都继承自一个基类,各种具体的算法各自实现
Java中的快速排序源代码
快速排序源代码
程序员必须知道的8大排序Java版源代码
本代码包含了直接插入排序,希尔排序,简单选择排序,堆排序,冒泡排序,快速排序,归并排序,基数排序等8大排序算法的源码!需要的朋友们可以拿去用。
快速排序Java代码示例
快排、java、sort、partition、枢轴、pivot、时间复杂度、递归、优化
JAVA排序算法集合
1.插入排序(直接插入排序、折半插入排序、希尔排序); 2.交换排序(冒泡泡排序、快速排序); 3.选择排序(直接选择排序、堆排序); 4.归并排序; 5.基数排序
海康威视摄像机SDK二次开发--提取音频保存至文件
由于最近在开发海康威视摄像头,特此记录一下如何提取音频数据,这里主要依靠语音对讲返回的音频数据,通过回调函数写入文件中,加个WAV头即可播放,编码格式可以自己设置在代码中有注释 文件结构 其中CameraInfo内容可以参看海康威视摄像机SDK二次开发–实时预览视频流保存到指定文件中 HIKSDKSaveRealData中的内容 package ClientDemo; import ClientDemo.CameraInfo; import com.sun.jna.NativeLong; import
Java实现10个经典排序算法
Java实现10个经典排序算法
JS+H5打字练习器
实现功能 1.导入.TXT文件到打字练习内容(部分浏览器可能出于安全问题限制了这一步操作) 2.输入文本到打字练习内(弹出输入框,将要练习的内容输入至输入框) 3. 开始练习,并根据正误在打字练习内容文本上修改颜色(某个字正确显示绿色,某个字错误,显示红色,某个字没有打显示灰色) 4.开始练习、结束练习,全部输入完成后自动结束练习,也可提前手动结束练习,结束练习后弹窗用显示时和正确率。(区别在于一个全部输入完成且全部正确,一个提前结束无其他条件) 效果图 分析 HTML 结构解析 根元素:<!DO
Java高级排序
1.希尔排序 希尔排序是插入排序的一种,又称“缩小增量排序”,是插入排序算法的一种更高效的改进版本。 排序原理: 选定一个增长量h(可以为数组长度一半开始),按照增长量h作为数据分组的依据,对数据进行分组; 对分好组的每一组数据完成插入排序; 减小增长量,最小减为1,重复第二步操作。 //希尔排序 public static void sort(int[] arr) { //增长量 int h = arr.length / 2;
TortoiseGit之配置密钥
基于github的开发必须要用到rsa密钥,因此需要用到TortoiseGit的putty key generator工具,来生成既适用于github的rsa密钥也适用于TortoiseGit的ppk密钥。
睿尔曼超轻量仿人机械臂--医疗工作站运行Demo(Python)
开发环境系统:win10Python版本:python 3.11.2由于机械臂相关软件版本不定期更新,如果你使用的软件接口或协议与本文有出入,请联系官方技术人员及时更新。
基础排序算法(三)——插入排序及其优化思路
插入排序 public class InsertSort { public static void sort(long[] arr){ for (int i = 1; i < arr.length; i++) { long tmp = arr[i];//当前值 int k = i; //记录位置 f
【FPGA XDMA AXI Bridge 模式】PCIe:BARs 和 AXI:BARs 含义解析
Xilinx的 DMA/Bridge Subsystem for PCI Express IP核中,支持普通的XDMA模式,但是这种模式只允许主机端发起PCIe 读写请求,FPGA内部无法主动发起读写请求,也即FPGA无法主动读写HOST的内存。而该IP核的另一种模式,AXI Bridge模式则支持HOST主动读写,以及FPGA主动读写。该模式下有个参数需要配置,分别是PCIe:BARs以及AXI:BARs。而上述的普通模式只有PCIe:BARs需要配置。下面详细说说这两个参数的含义。
晋南讲堂之各类排序算法精讲(附经典Java源码)
常用的各类排序算法
玩转Docker小游戏项目系列:Docker部署吃豆人经典小游戏
玩转Docker小游戏项目系列:Docker部署吃豆人经典小游戏
YOLOv11训练命令完全指南:从核心参数解析到高级调优实战(数据配置、epochs设定、batch-size优化与img-size调整)(二)
本文介绍了YOLOv11训练命令的完整配置与解析,提供了基础训练命令示例及参数详解。示例命令包含数据集配置(coco.yaml)、训练轮次(300)、批次大小(64)、图像尺寸(640)等核心参数,以及优化器(AdamW)、学习率(0.001)等调优选项。通过代码实现展示了训练器的初始化流程,包括参数解析、设备设置、数据加载和模型创建等关键步骤,为YOLOv11模型训练提供了实用指导。
Java排序算法Sort源码分析
Java排序算法Sort源码分析
uni-app - 文本展开 / 收起折叠功能,支持自定义样式(当文本内容超出规定行数后,展开收起折叠的功能)兼容 H5 / App / 小程序且易用更容易修改的插件组件源码,超详细的示例代码及注释
uniapp实现文本的展开与收起功能,uniapp展开全部和收起,uniapp里文本的展开与收起,uniapp中文本内容超出规定行数后展开收起的处理,UNIAPP兼容h5、微信小程序多行文本展开或收起,uni-app中,文字超出隐藏并显示省略号(实现展开、收起全文),uni-app中文本过长-实现折叠与展开效果,中文本内容超出规定行数(字数)后展开收起的处理,超出部分...显示,uniapp适用于uniapp多行文本溢出显示...,多行文本展开或收起,uni-app-文本展开/收起折叠功能,支
聊聊 Java String 源码的排序算法
聊聊 JDK 源码,聊聊算法。 本场 Chat 主要内容: 什么是选择问题 比较(Comparable)能力 java.lang.Comparable 比较接口 数组排序 集合排序 String 源码中的排序算法 String 存储结构 String 比较方法源码解析 常见字符 ASCII 码 弊端分析总结 ...
Probability and Statistics - 4th edition
Probability and Statistics - 4th edition
WINCC7.3破解文件
WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!
浅入浅出 Java 排序算法
Java String 源码的排序算法 一、前言 Q:什么是选择问题?选择问题,是假设一组 N 个数,要确定其中第 K 个最大值者。比如 A 与 B 对象需要哪个更大?又比如:要考虑从一些数组中找出最大项? 解决选择问题,需要对象有个能力,即比较任意两个对象,并确定哪个大,哪个小或者相等。找出最大项问题的解决方法,只要依次用对象的比较(Comparable)能力,循环对象列表,一次就能解决。 那么...
pscad IEEE标准系统搭建说明
pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。
十大排序算法----详解(Java源码)汇总
原文地址:https://www.cnblogs.com/onepixel/articles/7674659.html 话不多说:对于排序算法,可以大致的分为两类 : 比较类排序:通过比较决定元素之间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序,相反道理,不通过比较来决定元素之间的相对次序,它可以突破基于比较排序的时间下界...
NTscan扫描工具
ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。
Java 比较排序算法
简单比较排序算法详解: http://blog.youkuaiyun.com/ysjian_pingcx/article/details/8652091 简单比较排序算法源码下载: http://download.youkuaiyun.com/detail/ysjian_pingcx/6750815 序:一个爱上Java最初的想法一直没有磨灭:”分享我的学习成果,不管后期技术有多深,打好基础很重要“。 之前即将毕业那会儿,写过关于排序算法的几篇文章,有一些大学里面学到的常见的算法,
简单选择排序算法java源码
简单选择排序算法java源码
Java:实现分布计数排序算法(附带源码)
Java:实现分布计数排序算法(附带源码)
Java选择排序算法
选择排序算法详解:http://blog.youkuaiyun.com/ysjian_pingcx/article/details/8656048 选择排序算法源码免积分下载:http://download.youkuaiyun.com/detail/ysjian_pingcx/6794271 序:一个爱上Java最初的想法一直没有磨灭:”分享我的学习成果,不管后期技术有多深,打好基础很重要“。 声明:所有源码经由本人原创,上道者皆似曾相识,另未经过权威机构或人士审核和批准,勿做商业用途,仅供学习分享,若要转载,请注明出处。
327



被折叠的 条评论
为什么被折叠?



