介绍java中的常见排序算法

【Java学习】第20节:介绍几种常见查找、排序算法 Java是一种广泛使用的编程语言,由Sun Microsystems(现在是Oracle Corporation)首次推出。它是一种跨平台的编程语言,意味着您可以编写一次代码,然后在多个不同的计算机系统上运行,而无需对其进行修改。Java被广泛用于开发各种类型的应用程序,包括企业级应用、移动应用、Web应用、游戏等。 阅读详情

Java中的排序算法主要包括以下几种:

  1. 冒泡排序(Bubble Sort)
  2. 选择排序(Selection Sort)
  3. 插入排序(Insertion Sort)
  4. 快速排序(Quick Sort)
  5. 归并排序(Merge Sort)
  6. 堆排序(Heap Sort)

下面分别进行详细介绍。

1.冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法,它通过不断交换相邻两个元素的位置,使得每次遍历结束后最大的元素被放在了最后面。时间复杂度为$O(n^2)$。

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

2.选择排序(Selection Sort) 选择排序也是一种简单的排序算法,它每次找出未排序部分中最小的元素,然后将其放在已排序部分的末尾。时间复杂度为$O(n^2)$。

public static void selectionSort(int[] arr){
    int n = arr.length;
    for(int i = 0; i < n - 1; i++){
        int minIndex = i;
        for(int j = i + 1; j < n; j++){
            if(arr[j] < arr[minIndex]){
                minIndex = j;
            }
        }
        int temp = arr[i];
        arr[i] = arr[minIndex];
        arr[minIndex] = temp;
    }
}

3.插入排序(Insertion Sort) 插入排序也是一种简单的排序算法,它将未排序部分的第一个元素插入到已排序的部分中的正确位置上。时间复杂度为$O(n^2)$。

public static void insertionSort(int[] arr){
    int n = arr.length;
    for(int i = 1; i < n; i++){
        int cur = arr[i];
        int j = i - 1;
        while(j >= 0 && arr[j] > cur){
            arr[j+1] = arr[j];
            j--;
        }
        arr[j+1] = cur;
    }
}

4.快速排序(Quick Sort) 快速排序是一种高效的排序算法,它基于分治思想,将问题分解为多个子问题。它每次选择一个基准元素将待排序的数组分为两个子数组,小于基准的放在左边,大于等于基准的放在右边,然后对两个子数组进行递归调用。时间复杂度为$O(nlogn)$。

public static void quickSort(int[] arr, int left, int right){
    if(left < right){
        int pivotPos = partition(arr, left, right);
        quickSort(arr, left, pivotPos - 1);
        quickSort(arr, pivotPos + 1, right);
    }
}

private static int partition(int[] arr, int left, int right){
    int pivot = arr[left];
    int i = left;
    int j = right;
    while(i < j){
        while(i < j && arr[j] >= pivot){
            j--;
        }
        arr[i] = arr[j];
        while(i < j && arr[i] < pivot){
            i++;
        }
        arr[j] = arr[i];
    }
    arr[i] = pivot;
    return i;
}

5.归并排序(Merge Sort) 归并排序也是一种高效的排序算法,它基于分治思想,将待排序的数组分成两个子数组,然后对子数组进行排序,最后将两个子数组进行归并。时间复杂度为$O(nlogn)$。

public static void mergeSort(int[] arr, int left, int right){
    if(left < right){
        int mid = (left + right) / 2;
        mergeSort(arr, left, mid);
        mergeSort(arr, mid + 1, right);
        merge(arr, left, mid, right);
    }
}

private static void merge(int[] arr, int left, int mid, int right){
    int[] temp = new int[right - left + 1];
    int i = left;
    int j = mid + 1;
    int k = 0;
    while(i <= mid && j <= right){
        if(arr[i] <= arr[j]){
            temp[k++] = arr[i++];
        }else{
            temp[k++] = arr[j++];
        }
    }
    while(i <= mid){
        temp[k++] = arr[i++];
    }
    while(j <= right){
        temp[k++] = arr[j++];
    }
    for(int x = 0; x < temp.length; x++){
        arr[left + x] = temp[x];
    }
}

6.堆排序(Heap Sort) 堆排序是一种高效的排序算法,它基于堆结构,将待排序的数组构建成大根堆或小根堆,然后将堆顶元素与末尾元素进行交换,并重新构建堆,重复以上步骤直到整个数组有序。时间复杂度为$O(nlogn)$。

public static void heapSort(int[] arr){
    int n = arr.length;
    for(int i = n/2-1; i >= 0; i--){
        adjustHeap(arr, i, n);
    }
    for(int i = n-1; i > 0; i--){
        int temp = arr[0];
        arr[0] = arr[i];
        arr[i] = temp;
        adjustHeap(arr, 0, i);
    }
}

private static void adjustHeap(int[] arr, int i, int n){
    int temp = arr[i];
    for(int j = 2*i+1; j < n; j = 2*j+1){
       if(j + 1 < n && arr[j] < arr[j+1]){
           j++;
       }
       if(arr[j] > temp){
           arr[i] = arr[j];
           i = j;
       }else{
           break;
       }
    }
    arr[i] = temp;
}

XS5018A TX ISP芯片同轴高清模拟输出图像处理芯片用户指南 当看门狗开启且系统异常,看门狗模块得不到喂狗信号时,自动产生看门狗复位信号,复位​​​​​​​。分量上与人眼对光谱的响应通常是有偏差的,通常通过一个色彩校正矩阵校正光谱响应的交叉效。但实际上由于电路的作用,复位模块对整个芯片及各个功能模块的复位进行统一管理,负责产生各个模块的软复位信。每个区域前景色可以在 16 个色表中查找,单个区域的前景色统一,各个区域的前。较弱的坏点被放大成刺眼的白点和明显的黑点,强烈推荐开启动态坏点校正功能。四种制式,通过寄存器配置,可以很方便的实现四种制式的切换、且可以对截止。 阅读详情

相关推荐

通达信强龙趋势幅图指标 - 精准捕捉趋势,把握强势行情,多角度分析个股,强弱一目了然

STICKLINE(趋势>0 AND SJTJ,4.8,5.8,1.5,0),COLORYELLOW;STICKLINE(资金>0 AND SJTJ,1.2,2.2,1.5,0),COLOR0080FF;STICKLINE(异动>0 AND SJTJ,0,1,1.5,0),COLORFF0080;STICKLINE(异动=0 AND SJTJ,0,1,1.5,1),COLORGRAY;

Q1809330692的博客 5643

排序算法——八种常见排序算法的简单介绍和JAVA代码实现

本文进行了八种常见排序算法(冒泡,快排,插入,希尔,归并,基数,选择,堆排序)的简单介绍和JAVA代码实现

qq_65754164的博客 1260

Qt思岚激光雷达

Qt关于思岚激光雷达研究示例,本示例采用qt界面开发,可以串口也可以tcp进行设备连接。接收数据进行相关的数据进行绘图, 这种雷达可以用于大屏触摸场景,会场互动触摸场景开发。 #ifndef MAINWIDGET_H #define MAINWIDGET_H #include <QTimer> #include <QWidget> #include "lidarmgr.h" namespace Ui { class MainWidget; } class MainWidget.

cqltbe131421的博客 1598

java中常见的排序算法设计介绍

java中常见的排序算法设计介绍

骑牛小道士 1007

从ROS2到ROS1:Lightning-LM激光SLAM模块的移植实践与核心代码解析

本文详细解析了将高性能激光SLAM算法Lightning-LM从ROS2移植到ROS1的完整实践过程。针对ROS1与ROS2在节点初始化、话题通信、参数服务器及TF发布等核心API的差异,文章提供了loc_system和slam模块的核心代码改造示例,并给出了适配catkin的CMakeLists.txt与package.xml配置方案,帮助开发者在现有ROS1生态中高效集成先进的SLAM模块。

weixin_29224529的博客 172

NVIDIA Omniverse 技术浅析(二):USD

例如,一个用户可以负责场景的几何体设计,另一个用户可以负责材质和灯光的调整。USD 的开放性和可扩展性,结合 Omniverse 的 Kit 扩展框架,使得用户和开发者可以创建自定义的应用程序和工具,以满足特定的需求。USD 的材质和物理属性系统,结合 Omniverse 的 RTX 实时渲染技术,使得用户可以在虚拟环境中看到逼真的光影效果和物理模拟。USD 的时间轴和动画功能,结合 Omniverse 的物理属性系统,使得用户可以为虚拟环境中的元素创建复杂的动画和物理模拟。

m0_75253143的博客 446

Java常见的八大排序算法介绍

总结一下常用的排序八大算法: 时间复杂度、空间复杂度及稳定性介绍: 1、冒泡排序 2、选择排序 3、插入排序 4、快速排序 5、归并排序 6、希尔排序 7、堆排序 8、基础排序

HappySundlut的博客 637

YOLO11,ultralytics-main源代码目录结构详解

本文详细介绍了YOLO11框架的ultralytics-main源代码目录结构,帮助用户更好地理解和使用YOLO模型。主要目录包括:docker文件夹,包含多种Docker镜像文件,适用于不同硬件环境;docs文件夹,存放YOLO的说明文档;examples文件夹,提供YOLO使用的示例代码;tests文件夹,包含单元测试模块;ultralytics文件夹,为核心代码所在,包含推理逻辑、配置、数据处理等模块。其中,engine文件夹负责训练和推理引擎,models文件夹存放模型架构,nn定义神经网络结构

qq_30279827的博客 1286

几个常见排序算法介绍和java实现

算法描述 名称 平均时间复杂度 最坏时间复杂度 空间复杂度 稳定性 冒泡排序 O(n^2) O(n^2) O(1) 稳定 选择排序 O(n^2) O(n^2) O(1) 不稳定 插入排序 O(n^2) O(n^2) O(1) 稳定 奇偶排序 O(n^2) O(n^2) O(1) 稳定 希尔排序 O(n^3/2) O(n^2) O(1) 不稳定 快速排序 O(nl...

edui的博客 364

【控制模块路径跟踪算法】PID控制算法实现路径跟踪(附C++代码)

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对PID控制算法实现路径跟踪–飞思卡尔的方法做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容PID属于无模型控制,调节三个环节的参数会产生什么影响根据控制对象的不同也会有很大差别PID形象解释小明接到这样一个任务:有一个水缸点漏水(而且漏水的速度还不一定固定不变),要求水面高度维持在某个位置,一旦发现水面高度低于要求位置,就要往水缸里加水。

qq_35635374的博客 2389

matlab 计算点云粗糙度

A Correspondence Framework for ALS Strip Adjustments based on Variants of the ICP Algorithm

点云侠的博客 1830

Java面试自我介绍怎么说?Java面试技巧!,java常见排序算法面试题

虽然我个人也经常自嘲,十年之后要去成为外卖专员,但实际上依靠自身的努力,是能够减少三十五岁之后的焦虑的,毕竟好的架构师并不多。架构师,是我们大部分技术人的职业目标,一名好的架构师来源于机遇(公司)、个人努力(吃得苦、肯钻研)、天分(真的热爱)的三者协作的结果,实践+机遇+努力才能助你成为优秀的架构师。如果你也想成为一名好的架构师,那或许这份Java成长笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。一个人可以走的很快,但一群人才能走的更远。

2401_84104809的博客 2313

Obsidian与RAG:知识管理的未来之战

摘要: 本文对比了传统RAG、Obsidian和llm-wiki-skill三种知识管理方案。传统RAG依赖查询时临时检索,知识无法积累;Obsidian需人工整理,成本高但结构化强;llm-wiki-skill通过AI在摄入时自动编译知识为结构化Wiki,实现持续增值。核心差异在于知识处理时机——llm-wiki-skill将"查询时检索"转变为"摄入时编译",通过三层Markdown结构(sources/concepts/entities)和自动双向链接构建可进化

ZhangJiqun&191cm&85kg 627

java的各种排序简单介绍m_Java实现常见基础排序算法

1.直接插入排序在插入第i个记录的时,R1,R2...已经排好序,这时将关键字R依次与R1...比较,从而找到应该插入的位置,插入位置以及其后的记录依次往后移动。时间复杂度O(n^2) 空间复杂度O(1)2.冒泡排序首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则交换这两个记录的值,然后比较第二个和第三个记录的关键字,以此类推,知道第n-1个记录和第n个记录比较过为止。上...

weixin_30438053的博客 123

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Java的几种常见排序算法

Java的几种常见排序算法 一、所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。在各个领域中考虑到数据的各种限制和规范,要得到一个符合实际的优秀算法,得经过大量的推理和分析。 二、排序算法可以分为内部排序和外部排序。 内部排序是数据记录在内存中进行排序。 外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访

余生不过半载 152

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java中的常见排序算法及其实现

在 Java 中,排序是一个常见的操作,Java 提供了多种排序算法来对数组或集合进行排序。

Gszxzcs的博客 567

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java常见排序算法详解

Java中的排序算法种类繁多,每种算法都有其独特的优势和适用场景。在选择排序算法时,需要根据数据的规模、数据的特点以及具体需求来综合考虑。对于小规模数据,简单的排序算法如插入排序和选择排序可能更为方便;而对于大规模数据,快速排序、归并排序和堆排序则更为高效。此外,稳定性也是选择排序算法时需要考虑的一个重要因素。随着计算资源的不断丰富,并行化排序也成为了提高排序效率的一种有效手段。总之,在Java编程中,理解和掌握各种排序算法的原理和实现方式,对于提高程序的性能和效率至关重要。

weixin_40381772的博客 950

Java 常见排序算法新手速成

在 Java 编程中,排序算法是非常重要的一部分。下面为您详细且清晰地介绍几种常见的排序算法,包括冒泡排序、选择排序、插入排序、快速排序、归并排序和桶排序,并附上代码示例和全面的解释。

2302_79294738的博客 1072

Java数组篇[9]:数组排序算法大比拼

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛   今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。   我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余...

weixin_40360181的博客 193

java中的排序方法_Java中8种常见的排序方法

本博主要介绍Java中几种常见的排序算法;/*排序方法的演示1)插入排序(直接插入排序、希尔排序)2)交换排序(冒泡排序、快速排序)3)选择排序(直接选择排序、堆排序)4)归并排序5)分配排序(基数排序)所需辅助空间最多:归并排序所需辅助空间最少:堆排序平均速度最快:快速排序不稳定:快速排序,希尔排序,堆排序。*/其中,文字部分来自于网上整理,代码部分属于自己实现的(堆排序,归并排序,基数排序代码...

weixin_36048031的博客 4755

java 图形应用有必要学吗_学Java能拿高薪吗 Java中常见排序算法有哪些

  学Java能拿高薪吗?Java中常见排序算法有哪些?作为老牌编程语言,Java拥有广阔的市场占有率,几乎90%以上的大中型互联网应用系统在服务端开发都会首选Java。为了加入到Java这一高薪行业,很多人会选择专业学习一下,接下来千锋郑州就给大家简单讲解Java中常见的排序算法,帮助大家巩固加深理解。   所谓排序,是指将一组杂乱无章的数据按一定的规律顺次排列起来,其中涉及数据表、排序码两个概...

weixin_39849548的博客 75

Java:排序算法

Java中有很多种排序算法,每种算法都有其特点,适用于不同的场景。这些排序算法各有优缺点,选择合适的排序算法可以大大提高程序的效率。

在那一刻,我们或许会发现自己站在了时间的另一岸,以更加成熟和宽广的胸怀,去拥抱那份隔代相传的深情。 877

android studio插入数据表中没有_学Java能拿高薪吗 Java中常见排序算法有哪些

  学Java能拿高薪吗?Java中常见排序算法有哪些?作为老牌编程语言,Java拥有广阔的市场占有率,几乎90%以上的大中型互联网应用系统在服务端开发都会首选Java。为了加入到Java这一高薪行业,很多人会选择专业学习一下,接下来千锋郑州就给大家简单讲解Java中常见的排序算法,帮助大家巩固加深理解。  所谓排序,是指将一组杂乱无章的数据按一定的规律顺次排列起来,其中涉及数据表、排序码两个概念...

weixin_42447681的博客 93

java 排序算法面试题_java中七种常见的排序算法(面试常考!!!)

常见的排序算视图总览:一,插入排序1,介绍及实现思路整个区间被分为有序区间无序区间每次选择无序区间的第一个元素,在有序区间内选择合适的位置插语言方法5689Q3ltT62b20ke55771522009/04/11 23:40:522,代码//默认为升序排序public static void insertSort(int[] array){//通过bound划分出两个区间//[0,bound)表...

weixin_39774490的博客 597

Java常见排序算法

Java常见排序算法

weixin_33971205的博客 91

java冒泡排序经典代码_推荐十大经典排序算法,再也不用担心面试了

作者:gallonyin来源:https://github.com/hustcc/JS-Sorting-Algorithm排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括:关于时...

weixin_39633276的博客 776
上一篇: 介绍财务系统的组成和业务流程
下一篇: 介绍java中的冒泡排序
懒人刘
博客等级 码龄4年 541粉丝 263原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值