各类排序算法汇总(java源码)

Java排序算法详解及示例汇总——超详细 冒泡排序、选择排序、直接插入排序、二分法排序、希尔排序、快速排序、堆排序、归并排序、基数排序,共9中排序算法详解和代码示例。示例中全部采用从小到大排序,编码方式为本人理解的思路,算法思想也是自己理解的口语表达方式,若想查看更准确的算法思想和代码示例可直接搜索各算法的百科示例源码地址一、冒泡排序1、算法思想两两比较,如果后者比前者大则交换位置每遍历一圈最大的数就会冒到最后,则确定了本轮比较中的最大值... 阅读详情
**主要内容为(快排、插入排序、选择排序、冒泡、希尔排序、堆排序、归并排序),最下方有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实现、配图解,附源码) Python微信订餐小程序课程视频 https://edu.youkuaiyun.com/course/detail/36074 Python实战量化交易理财系统 https://edu.youkuaiyun.com/course/detail/35475 前言: 本文章主要是讲解我个人在学习Java开发环境的排序算法时做的一些准备,以及个人的心得体会,汇集成本篇文章,作为自己对排序算法理解的总结与笔记。 内容主要是关于十大经典排序算法的简介、原理、动静态图解和源码实现的分析。 对于一名程序员来讲,我们都知道数据结构与算法起初是用 阅读详情

相关推荐

各种排序算法合集

各种排序算法合集,每种排序算法都继承自一个基类,各种具体的算法各自实现

Java中的快速排序源代码

快速排序源代码

heibusi的博客 327

程序员必须知道的8大排序Java版源代码

本代码包含了直接插入排序,希尔排序,简单选择排序,堆排序,冒泡排序,快速排序,归并排序,基数排序等8大排序算法的源码!需要的朋友们可以拿去用。

快速排序Java代码示例

快排、java、sort、partition、枢轴、pivot、时间复杂度、递归、优化

qq_35939417的博客 1000

JAVA排序算法集合

1.插入排序(直接插入排序、折半插入排序、希尔排序); 2.交换排序(冒泡泡排序、快速排序); 3.选择排序(直接选择排序、堆排序); 4.归并排序; 5.基数排序

海康威视摄像机SDK二次开发--提取音频保存至文件

由于最近在开发海康威视摄像头,特此记录一下如何提取音频数据,这里主要依靠语音对讲返回的音频数据,通过回调函数写入文件中,加个WAV头即可播放,编码格式可以自己设置在代码中有注释 文件结构 其中CameraInfo内容可以参看海康威视摄像机SDK二次开发–实时预览视频流保存到指定文件中 HIKSDKSaveRealData中的内容 package ClientDemo; import ClientDemo.CameraInfo; import com.sun.jna.NativeLong; import

RichardoMu的博客 3173

Java实现10个经典排序算法

Java实现10个经典排序算法

明平姚的博客 824

JS+H5打字练习器

实现功能 1.导入.TXT文件到打字练习内容(部分浏览器可能出于安全问题限制了这一步操作) 2.输入文本到打字练习内(弹出输入框,将要练习的内容输入至输入框) 3. 开始练习,并根据正误在打字练习内容文本上修改颜色(某个字正确显示绿色,某个字错误,显示红色,某个字没有打显示灰色) 4.开始练习、结束练习,全部输入完成后自动结束练习,也可提前手动结束练习,结束练习后弹窗用显示时和正确率。(区别在于一个全部输入完成且全部正确,一个提前结束无其他条件) 效果图 分析 HTML 结构解析 根元素:<!DO

w11111xxxl的博客 1413

Java高级排序

1.希尔排序 希尔排序是插入排序的一种,又称“缩小增量排序”,是插入排序算法的一种更高效的改进版本。 排序原理: 选定一个增长量h(可以为数组长度一半开始),按照增长量h作为数据分组的依据,对数据进行分组; 对分好组的每一组数据完成插入排序; 减小增长量,最小减为1,重复第二步操作。 //希尔排序 public static void sort(int[] arr) { //增长量 int h = arr.length / 2;

weixin_53866772的博客 323

TortoiseGit之配置密钥

基于github的开发必须要用到rsa密钥,因此需要用到TortoiseGit的putty key generator工具,来生成既适用于github的rsa密钥也适用于TortoiseGit的ppk密钥。

欧文的博客 2078

睿尔曼超轻量仿人机械臂--医疗工作站运行Demo(Python)

开发环境系统:win10Python版本:python 3.11.2由于机械臂相关软件版本不定期更新,如果你使用的软件接口或协议与本文有出入,请联系官方技术人员及时更新。

realman_Rop的博客 1093

基础排序算法(三)——插入排序及其优化思路

插入排序 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

你要悄悄的拔尖,然后惊艳所有人 401

【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需要配置。下面详细说说这两个参数的含义。

weixin_45888152的博客 3730

晋南讲堂之各类排序算法精讲(附经典Java源码)

常用的各类排序算法

衣人之衣者,怀人之忧;食人之食者,死人之事! 3027

玩转Docker小游戏项目系列:Docker部署吃豆人经典小游戏

玩转Docker小游戏项目系列:Docker部署吃豆人经典小游戏

jks212454的博客 733

YOLOv11训练命令完全指南:从核心参数解析到高级调优实战(数据配置、epochs设定、batch-size优化与img-size调整)(二)

本文介绍了YOLOv11训练命令的完整配置与解析,提供了基础训练命令示例及参数详解。示例命令包含数据集配置(coco.yaml)、训练轮次(300)、批次大小(64)、图像尺寸(640)等核心参数,以及优化器(AdamW)、学习率(0.001)等调优选项。通过代码实现展示了训练器的初始化流程,包括参数解析、设备设置、数据加载和模型创建等关键步骤,为YOLOv11模型训练提供了实用指导。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1094

Java排序算法Sort源码分析

Java排序算法Sort源码分析

xmelon 1385

uni-app - 文本展开 / 收起折叠功能,支持自定义样式(当文本内容超出规定行数后,展开收起折叠的功能)兼容 H5 / App / 小程序且易用更容易修改的插件组件源码,超详细的示例代码及注释

uniapp实现文本的展开与收起功能,uniapp展开全部和收起,uniapp里文本的展开与收起,uniapp中文本内容超出规定行数后展开收起的处理,UNIAPP兼容h5、微信小程序多行文本展开或收起,uni-app中,文字超出隐藏并显示省略号(实现展开、收起全文),uni-app中文本过长-实现折叠与展开效果,中文本内容超出规定行数(字数)后展开收起的处理,超出部分...显示,uniapp适用于uniapp多行文本溢出显示...,多行文本展开或收起,uni-app-文本展开/收起折叠功能,支

🏆 前端领域优质创作者 5639

聊聊 Java String 源码的排序算法

聊聊 JDK 源码,聊聊算法。 本场 Chat 主要内容: 什么是选择问题 比较(Comparable)能力 java.lang.Comparable 比较接口 数组排序 集合排序 String 源码中的排序算法 String 存储结构 String 比较方法源码解析 常见字符 ASCII 码 弊端分析总结 ...

GitChat 1251

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)能力,循环对象列表,一次就能解决。 那么...

程序员泥瓦匠 3079

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

十大排序算法----详解(Java源码)汇总

原文地址:https://www.cnblogs.com/onepixel/articles/7674659.html 话不多说:对于排序算法,可以大致的分为两类 : 比较类排序:通过比较决定元素之间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序,相反道理,不通过比较来决定元素之间的相对次序,它可以突破基于比较排序的时间下界...

第二颗大白菜 4017

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Java 比较排序算法

简单比较排序算法详解: http://blog.youkuaiyun.com/ysjian_pingcx/article/details/8652091 简单比较排序算法源码下载: http://download.youkuaiyun.com/detail/ysjian_pingcx/6750815 序:一个爱上Java最初的想法一直没有磨灭:”分享我的学习成果,不管后期技术有多深,打好基础很重要“。 之前即将毕业那会儿,写过关于排序算法的几篇文章,有一些大学里面学到的常见的算法,

程序•袁 1610

简单选择排序算法java源码

简单选择排序算法java源码

zhaiyanqing7的专栏 732

Java:实现分布计数排序算法(附带源码)

Java:实现分布计数排序算法(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 2030

Java选择排序算法

选择排序算法详解:http://blog.youkuaiyun.com/ysjian_pingcx/article/details/8656048 选择排序算法源码免积分下载:http://download.youkuaiyun.com/detail/ysjian_pingcx/6794271 序:一个爱上Java最初的想法一直没有磨灭:”分享我的学习成果,不管后期技术有多深,打好基础很重要“。 声明:所有源码经由本人原创,上道者皆似曾相识,另未经过权威机构或人士审核和批准,勿做商业用途,仅供学习分享,若要转载,请注明出处。

程序•袁 1327
上一篇: Git 常用操作
下一篇: 常用建表语句mysql
Zor0
博客等级 码龄10年 1粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值