Java基础之List内元素的排序性能对比

yizhihongxing

Java基础之List内元素的排序性能对比

在Java中,我们经常需要对List中的元素进行排序,但不同的排序算法对于不同的元素数量和类型,性能表现并不相同。本篇文章将对Java中常见的三种排序算法进行性能测试和对比,帮助开发者在选择排序算法时能够更好地权衡性能和时间复杂度。

常见的排序算法

在Java中,常见的排序算法有以下三种:

  • 冒泡排序
  • 插入排序
  • 快速排序

测试环境和数据

测试平台:MacBook Pro 2019,2.3 GHz 八核Intel Core i9,16 GB 2667 MHz DDR4

测试数据:长度为10000的随机整数数组

冒泡排序

冒泡排序是一种基本的排序算法,实现简单,但对于性能较慢的数组排序来说,并不是最优的选择。

冒泡排序的基本原理是通过比较相邻元素,如果第一个比第二个大,则交换它们的位置,以此类推,直到最后一个元素。该算法需要进行多次遍历,每次都要比较相邻两位元素并进行交换,因此时间复杂度较高。

以下是冒泡排序的Java代码实现:

public 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 tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
            }
}

使用长度为10000的随机整数数组进行测试,冒泡排序的排序时间为3.815s。

插入排序

插入排序是一种高效的排序算法,特别适合于元素基本有序的场景。它的基本思想是将数组分成两部分,一部分为已排好序的元素,一部分为未排序的元素。每次从未排序的元素中取一个,插入到已排序的元素中,直到全部元素都被插入完毕。

以下是插入排序的Java代码实现:

public void insertionSort(int[] arr) {
    int n = arr.length;
    for (int i = 1; i < n; ++i) {
        int key = arr[i];
        int j = i - 1;

        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j];
            j = j - 1;
        }
        arr[j + 1] = key;
    }
}

使用长度为10000的随机整数数组进行测试,插入排序的排序时间为0.038s,明显优于冒泡排序。

快速排序

快速排序是一种高效的排序算法,它是基于分治法的思想,通过递归调用进行排序,具有较高的效率,响应速度较快。快速排序的基本思想是选出一个基准值(pivot),将数组分成两部分,一部分是小于基准值的元素,另一部分是大于或等于基准值的元素。然后对这两部分分别进行排序,递归调用该过程,最终得到排好序的数组。

以下是快速排序的Java代码实现:

public void quickSort(int[] arr, int low, int high) {
    if (low < high) {
        int pi = partition(arr, low, high);

        quickSort(arr, low, pi - 1);
        quickSort(arr, pi + 1, high);
    }
}

public int partition(int[] arr, int low, int high) {
    int pivot = arr[high];
    int i = (low - 1);

    for (int j = low; j < high; j++) {
        if (arr[j] < pivot) {
            i++;

            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }

    int temp = arr[i + 1];
    arr[i + 1] = arr[high];
    arr[high] = temp;

    return i + 1;
}

使用长度为10000的随机整数数组进行测试,快速排序的排序时间为0.008s,性能远超冒泡排序和插入排序。

总结

在本篇文章中,我们对Java中常见的三种排序算法进行了性能测试和对比,分别是冒泡排序、插入排序和快速排序。在处理元素数量较小或者基本有序的情况下,插入排序是一种高效的算法选择;当面对元素数量较大,并需要快速响应的情况下,快速排序是一种明智的选择。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java基础之List内元素的排序性能对比 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • JS apply用法总结和使用场景实例分析

    JS apply用法总结和使用场景实例分析 apply()是JS中的一个函数方法,它可以改变函数的this值,并将一个数组作为函数的参数传递进去。本文将对apply()的作用、使用方式和常见应用场景进行详细讲解。 apply()的作用 apply()方法是定义在Function.prototype上的,它的作用是改变函数的this指向,并且可以将一个数组作为…

    JavaScript 2023年5月28日
    00
  • javascript 解决表单仍然提交即使监听处理函数返回false

    当我们使用JavaScript对表单进行监听处理时,通常会添加一个事件处理函数,并在函数中使用return false语句来阻止表单的提交。但是,在某些情况下,仍然有可能发生表单提交的情况,这时我们需要采取其他措施来确保表单不会提交。下面是一些解决方法: 1. 使用preventDefault方法 preventDefault()方法可以阻止元素发生默认行为…

    JavaScript 2023年6月10日
    00
  • 整理Javascript数组学习笔记

    下面是针对“整理JavaScript数组学习笔记”的攻略: 1. 了解JavaScript数组基础知识 JavaScript数组是一种用于存储多个值的有序集合。数组是一种特殊的变量类型,使用方括号([ ])来表示。在数组中的每个元素都有一个唯一的索引。数组的索引通常从0开始,第一个元素的索引为0. 示例1:如何创建一个数组 var fruits = [‘Ap…

    JavaScript 2023年5月27日
    00
  • JavaScript引用类型和基本类型详解

    JavaScript引用类型和基本类型详解 在JavaScript中,我们有两种基本数据类型:基本类型和引用类型。 基本类型 基本类型是JavaScript中最基础的数据类型,包括字符串、数字、布尔值、null和undefined。基本类型的特点是它们是直接存储在堆栈中的。也就是说,当你创建一个变量并将一个基本类型的值赋给它时,这个值会被直接存储在变量所在的…

    JavaScript 2023年5月28日
    00
  • JavaScript实现横线提示输入验证码随输入验证码输入消失的方法

    要实现这个功能,我们需要用到JavaScript和CSS。 首先,我们需要在HTML页面中添加一个input标签来接受验证码输入,同时在输入框下面添加一个div标签来显示横线提示。例如: <label for="code">请输入验证码:</label> <input type="text&quot…

    JavaScript 2023年6月10日
    00
  • 在javascript中随机数 math random如何生成指定范围数值的随机数

    首先需要了解 Math.random() 方法可以生成一个在0(包含0)到1(不包括1)之间的一个伪随机数。要生成指定范围内的随机数,需要通过一些计算和转换来实现。以下是一些可能的做法: 做法一:生成任意两数之间的随机数 可以先生成一个在0到1之间的随机小数,然后将其乘以两个数的范围,再加上较小的数,从而实现生成任意两数之间的随机数。 function ra…

    JavaScript 2023年6月10日
    00
  • javascript jQuery $.post $.ajax用法

    下面是关于JavaScript jQuery中$.post和$.ajax用法的详细攻略。 什么是 jQuery? jQuery 是 Javascript 中的一种框架,可以方便地操作 HTML 文档、处理事件、制作动画方法等。jQuery 中提供了很多常用的函数和方法,使用它可以更加高效、简洁地编写Javascript代码。 jQuery 的 $.post …

    JavaScript 2023年5月27日
    00
  • javascript通过元素id和name直接取得元素的方法

    当我们需要通过JavaScript直接获取页面元素时,可以利用元素的id和name属性进行操作。以下是获取元素的完整攻略: 通过id属性获取元素: 通过JavaScript获取某个元素的方法是使用document对象的getElementById()方法,并将目标元素的id值作为参数传递给该方法。例如: var element = document.getE…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部