java几种常见的排序

排序,就是将一串数组(一个列表)中的元素(整数,数字,字符串等)按某种顺序(增大,减小,字典顺序等)重新排列。

下面介绍几种排序

1.冒泡排序

定义:冒泡排序就是从第一个元素开始,遍历数组,拿相邻的两个元素比较大小,大的排后面,小的移动到前面,通过一轮,得到最后的元素是最大的数.所以,这就需要到双层循环.外层循环控制排序轮数,内层循环用来比较相邻两个元素的大小.

例子1

使用冒泡排序排列班级的5个学生的成绩,下面给出主要的代码

public static void main(String[] args) {
//总循环次数为要数组的长度减 1
    for (int i = 0; i < score.length - 1; i++) {
        for (int j = 0; j < score.length - 1 - i; j++) {
            if (score[j] > score[j + 1]) {
                double temp = score[j + 1];
                score[j + 1] = score[j];
                score[j] = temp;
            }
            System.out.print(score[j] + " ");
        }
        for (int j = score.length - 1 - i; j < score.length; j++) {
            System.out.print(score[j] + " ");
        }
        System.out.println();
    }
}

因为一开始,就拿最先前面的两个元素做比较,所以最大循环轮数应该为数组的个数(长度)-1;然后内存循环用来比较相邻两个元素的大小.定义一个临时变量来存放数据,使两个元素之间能进行交换.

同时,冒泡排序的缺点也能看得出来:耗时,每次都需要从头开始比较.为了提高时间效率,下面介绍另一个排序方式.

2.快速排序

思路步骤:

首先需要任意选取一个数据(通常选用第一个数据),作为基准数;

再将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边;

再对左右区间重复第二步,直到各区间只有一个数。

下面用图说明:

java几种常见的排序

第一张图是最先输入的数据,以第一个数据15作为分割点.

java几种常见的排序

步骤二:这个过程,是通过遍历数据,分区,把比15小的数据移到这些比15大的数据的左边,分成两份,遍历完一轮,然后把15移到比15小的数据堆的右边

下面就接着重复步骤二

java几种常见的排序

现在遍历15的左边,到了以11为基准数,遍历4,8,4,都比11小,第二个4和11交换位置.

java几种常见的排序

再到4做基准数,遍历4,8;8比4大,黄色的4移到中间做分割点.

至此,左边区间只有一个数据,左边快速排序完成;同理,右边数据也一样进行排序.

3.选择排序

很明显,就是遍历数组,找出一个最小/最大的元素,顺序放在已排好序的数列的最后/最前.代码原理是使用外层循环控制循环轮数,内层循环找出最值,然后交换位置

例子2

利用选择排序方法实现对学生的成绩:89,78,69,80,99进行排序,并输出已排序的数组元素。

public static void main(String[] args) {
        int arr[] = {89,78,69,80,99};

        for (int i = 0; i < arr.length - 1; i++) {
            //找到最小值的下标
            int min = i;

            for (int j = i + 1; j < arr.length; j++) {

                if (arr[j] < arr[min]) {
                    //最小值下标赋给遍历到的那个数
                    min = j;
                }
            }

            // 将找到的最小值和i位置所在的值进行交换
            if (i != min) {
                int tmp = arr[i];
                arr[i] = arr[min];
                arr[min] = tmp;
            }
        }
        for (int i = 0; i ) {
            System.out.print(arr[i]+" ");

        }
    }
}

总结:排序在java程序中中不可或缺,这个网站里面含有排序的动态过程,结合动画方便去理解,会明白很多排序(冒泡排序,选择排序,插入排序,归并排序,快速排序,计数排序,基数排序) – VisuAlgo

Original: https://www.cnblogs.com/pilpill/p/16558002.html
Author: Tmillion
Title: java几种常见的排序

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/587052/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Kafka

    1. Kafka简介 1.1 消息队列 1.1.1 消息队列简介 消息Message:通讯设备之间传递的数据 队列Queue:一种特殊的线性表(数据元素首尾相连),特殊之处在于只允…

    Java 2023年6月8日
    096
  • webpack打包思路与流程解析

    一:创建一个新的工程,项目初始化 npm init -y 二:搭建项目框架 三:编写main.js文件内容,在index.js中引入,在把index.js引入到index.html…

    Java 2023年6月15日
    0108
  • Java File I/O 操作

    一、实验Demo UTF_8格式读写文件节点 import java.io.*; import static java.nio.charset.StandardCharsets.U…

    Java 2023年5月29日
    096
  • JavaFx制作简易的mp4播放器

    在制作视频播放器时,用JAVA语言编写是个很方便的选择。虽然JavaFX从JDK11开始就分离,但是在网上稍微搜索下就可以找到解决方法(在命令行下运行的命令是最清楚的)。原谅我不太…

    Java 2023年6月9日
    095
  • Linux常用命令

    1、pwd命令 pwd命令,查看当前目录的路径linux下所有的绝对路径都是从根目录”/”开始root:是linux下root用户的根目录home:是lin…

    Java 2023年6月9日
    062
  • spring mvc 实战化项目之三板斧

    laravel实战化项目之三板斧 spring mvc 实战化项目之三板斧 asp.net mvc 实战化项目之三板斧 接上文希望从一张表(tb_role_info 用户角色表)的…

    Java 2023年5月30日
    0106
  • 猴子吃桃(递归)

    递归案例实践分析 猴子偷桃 题目描述: 猴子第一天摘下若干桃子,当即吃了一半,觉得好吃不过瘾,于是又多吃了一个,,第二天又吃了前天剩余桃子数量的一半,觉得好不过瘾,于是又多吃了一个…

    Java 2023年6月6日
    0136
  • Java-IO中的节点流和处理流

    理解好Java-IO中的节点流和处理流是理解Java输入、输出的关键基础,因此,了解节点流和处理流相关的知识点尤为重要。 1.定义 (1)节点流:可以从或向一个特定的地方(节点)读…

    Java 2023年5月29日
    084
  • [学习笔记] Java多态

    多态是同一种行为具有多个不同表现形式的能力,同一事件发生在不同的对象上会产生不同结果; 多态的同一个接口,使用不同的实例而执行不同的操作; 多态性是对象的多种表现形式的体现; 多态…

    Java 2023年6月5日
    085
  • Spring Boot @Autowired 没法自动注入的问题

    Application 启动类: @SpringBootApplication @EnableConfigurationProperties @ComponentScan(base…

    Java 2023年5月30日
    094
  • 【WPF】Image控件显示Gif图片

    前端使用: 不知道是不是我图片问题,循环播放的时候,起始的位置总会有闪一下。不知道怎么解决。 参考文章: https://blog.csdn.net/weixin_30628077…

    Java 2023年5月29日
    071
  • Spring事务提交之后做些操作

    在使用spring事务时,我们通常会把事务内的所有操作当成是一个原子操作。也就是当整个事务内的所有代码都执行完成后, 才会将所有的数据落实到数据库中。这样做有时也会给我们造成麻烦。…

    Java 2023年5月30日
    063
  • 深入理解java泛型

    什么是Java泛型 泛型的使用 泛型类 泛型接口 泛型方法 泛型的底层实现机制 ArrayList源码解析 什么是泛型擦除 泛型的边界 ?:无界通配符 extends 上边界通配符…

    Java 2023年6月15日
    082
  • Java面试题(七)–Spring Boot

    1、Spring Boot提供了哪些核心功能?(高频) 1、jar包方式运行 通过引入spring-boot-maven-plugin插件可以将springboot项目打包成一个可…

    Java 2023年6月9日
    093
  • 消息队列ActiveMQ

    什么是ActiveMQ ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Pro…

    Java 2023年5月30日
    0111
  • VS Code安装

    如果下载速度很慢,点击官网logo下方有一行”Version xxx is now available! xxx”的蓝字进入更新说明。日期(版本)的大字下有…

    Java 2023年6月7日
    094
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球