首页 > 编程语言 >常见的排序算法(Java实现)

常见的排序算法(Java实现)

时间:2024-08-01 10:25:44浏览次数:14  
标签:arr end temp int 基准 start 算法 Java 排序

   一、冒泡排序

            相邻的两个元素比较,大的放右边,小的放左边。

二、选择排序

      从0索引开始,把每一个索引依次跟后面的索引比较,大的放后面,小的放前面

三、插入排序

    将数组分为有序和无须两种,遍历数组将无须的数组插入有序的数组当中

四、快速排列

    见名知意,快速排列的时间的成本非常低。本质是利用了递归算法。

  1.    首先,将排序范围里面中的第一个数字当作基准数,在定义两个变量start,end。
  2. 一定要先从end开始,从后往前找比基准数小的数,然后start从前往后找到比基准数大的数字
  3. 找到后交换start和end指向元素的位置,并循环这一过程,直到start和end处于一个位置,该位置是基准数在数组中应该存入的位置,再让基准数归位。
  4. 归位后利用递归重述以上过程。比基准数大的在右边,比基准数小的在左边。
public static void Sort(int[] arr, int i, int j) {
    int start = i;
    int end = j;
    if (i > j) {
        return;
    }
    int number = arr[i];

    while (start != end) {
        //找到比基准数小的,放在左边
        while (true) {
            if (start >= end || arr[end] < number) {
                break;
            }
            end--;
        }
        //找到比基准数大的,放在右边
        while (true) {
            if (start >= end || arr[start] > number) {
                break;
            }
            start++;
        }
        int temp = arr[start];
        arr[start] = arr[end];
        arr[end] = temp;
    }
    //基准数归位
    int temp = arr[i];
    arr[i] = arr[end];
    arr[end] = temp;
    //重复左边
    Sort(arr, i, start - 1);
    //重复右边
    Sort(arr, start + 1, j);

}

标签:arr,end,temp,int,基准,start,算法,Java,排序
From: https://blog.csdn.net/akiramenai/article/details/140828288

相关文章

  • springboot+vue基于协同算法的电影推荐系统【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着互联网的飞速发展,网络视频平台已成为人们日常生活中不可或缺的一部分,尤其是电影观看的主要渠道。然而,面对海量的电影资源,用户往往难以快速找到符合自己喜好的影片,这不仅降低了用户体验,也限制了电影内容的有效传播。传统的推荐系统......
  • springboot+vue基于协同过滤算法的新闻推荐系统【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景在信息爆炸的时代,互联网上的新闻资讯以惊人的速度增长,用户在面对海量新闻时往往感到无所适从,难以快速筛选出符合个人兴趣与需求的内容。传统的新闻浏览方式已难以满足用户个性化、高效化的信息获取需求。因此,开发一种能够智能推荐个性......
  • Java中的运算符
    运算符目录运算符运算符的分类算术运算符关系运算符位运算符逻辑运算符短路逻辑运算符赋值运算符条件运算符(?:)instanceof运算符Java运算符优先级运算符的分类计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。我们可以把运......
  • Java流程控制结构中的分支结构
    分支结构目录分支结构if...else分支结构switch-case分支结构在Java编程中,分支结构是控制程序流程的重要工具,它允许程序根据不同的条件执行不同的代码块。Java提供了两种主要的分支结构:if-else和switch-case。本文将详细介绍这两种结构的工作原理、语法规则以及实战应用,帮助读者......
  • Java中类和对象
    类和对象1.面向对象与面向过程面向对象(ObjectOrientedProgramming,OOP)与面向过程(ProcedureOrientedProgramming,POP)是两种不同的编程范式,它们在编程思想、特点、优势及应用场景等方面存在显著差异。一、编程思想面向过程:以过程为中心,关注于“做什么”,即解决问题的步......
  • 假的字符串 Trie+拓扑排序
    假的字符串Trie+拓扑排序题目链接题意:给定n个字符串,互不相等,你可以任意指定字符之间的大小关系(即重定义字典序),求有多少个串可能成为字典序最小的串,并输出它们。思路:我们可以对每个字符串单独判断,考虑当前\(s_i\)为字典序最小的串。那么首先要满足的条件就是\(s_i\)的前......
  • Java sshtools 生成的 EDDSA 签名与 Python 的 pycryptome 生成的签名不匹配
    我有一个python库,它使用pycryptodomelibrary使用openssh格式的ED25519私钥使用Ed25519算法对数据进行签名。然后需要使用sshtools库和相应的公钥在Java应用程序中验证签名。但是签名验证失败。约束:从文件中读取私钥/公钥很重要。我无法......
  • LeetCode 3111. 覆盖所有点的最少矩形数目(贪心、排序)
    题目:3111.覆盖所有点的最少矩形数目思路:只需关注横坐标,对横坐标进行升序排序,然后进行贪心,求得最少的矩阵数量classSolution{public:intminRectanglesToCoverPoints(vector<vector<int>>&points,intw){vector<int>v;for(inti=0;i<poi......
  • JAVA里的反射(详解)
    1.反射1.1反射的概述:专业的解释(了解一下):是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意属性和方法;这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。通俗的理解:(掌握)利用反射创建的对象可以无......
  • Java内存区域与内存溢出异常 - 运行时数据区
    一、运行时数据区1.1程序计数器-线程私有可以看做当前线程所执行的字节码行号指示器,在任意时刻一个处理器(对于多核处理器来说是一个内核)都只会执行一条线程中的指令。所以为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的线程计数器,各条线程之间计数器互不......