Java排序之冒泡排序的实现与优化

Java排序之冒泡排序的实现与优化

冒泡排序基本原理

冒泡排序是一种简单的排序算法,其基本思想是通过比较相邻的元素,将较大的数交换到右边,较小的数交换到左边。这样每一轮交换后,未排序的数列中的最大元素就被移动到了最右边,因此被称为“冒泡排序”。

基本算法实现

下面是基本的冒泡排序算法实现:

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

其中,外层循环控制轮数,内层循环控制每轮的比较和交换。每一轮内层循环结束后,未排序的部分的最大值已经被移到了正确的位置。

优化算法实现

虽然冒泡排序是一种简单易懂的算法,但是其时间复杂度为O(n^2),比较和交换的次数非常多,效率很低。因此,对其进行优化就显得尤为重要。

一、优化循环次数

我们可以在循环内部记录一个标志变量,表示是否进行了交换,如果没有进行交换,说明序列已经有序,直接退出循环,这样可以减少循环次数。

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

二、优化比较次数

我们可以在内层循环中记录最后一次交换的位置,之后的比较都不需要考虑这个位置以后的元素,这样可以减少比较次数。

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

示例说明

以下是针对两个不同数据集合的测试用例:

示例一

对于输入数组{10, 7, 3, 1, 9, 7, 4},经过冒泡排序算法之后,得到的结果为{1, 3, 4, 7, 7, 9, 10}。过程如下:

第1轮:
7 10 3 1 9 7 4
7 3 10 1 9 7 4
7 3 1 10 9 7 4
7 3 1 9 10 7 4
7 3 1 9 7 10 4
7 3 1 9 7 4 10
第2轮:
3 7 1 9 7 4 10
3 1 7 9 7 4 10
3 1 7 7 9 4 10
3 1 7 7 4 9 10
第3轮:
1 3 7 4 7 9 10
1 3 4 7 7 9 10
第4轮:
1 3 4 7 7 9 10
第5轮:
1 3 4 7 7 9 10
第6轮:
1 3 4 7 7 9 10

示例二

对于输入数组{1, 2, 3, 4, 5, 6},经过冒泡排序算法之后,得到的结果为{1, 2, 3, 4, 5, 6}。由于该数组已经有序,优化后的冒泡排序算法只执行了一轮循环,效率大大提高。

总结

冒泡排序虽然算法简单易懂,但是效率较低,应该尽量避免在实际的应用场景中使用,针对其时间复杂度比较高的问题,我们可以进行相应的优化,例如减少比较次数和循环次数等。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java排序之冒泡排序的实现与优化 - Python技术站

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

相关文章

  • C语言之直接插入排序算法的方法

    C语言直接插入排序算法的方法 什么是直接插入排序 直接插入排序,是一种应用最广泛的排序算法之一,也是一种稳定的排序算法。它的基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的有序表。具体的过程是将待排序的元素插入到已经排好序的元素中,使插入后仍保持有序。 代码实现 下面是用C语言实现直接插入排序算法的代码: void direct_insert…

    算法与数据结构 2023年5月19日
    00
  • c++数组排序的5种方法实例代码

    C++ 数组排序的 5 种方法实例代码 本篇文章介绍了使用 C++ 实现数组排序的 5 种方法,包括冒泡排序、选择排序、插入排序、希尔排序和快速排序。下面我们就分别详细阐述各种排序方法的实现。 冒泡排序 冒泡排序的基本思想是比较相邻的两个元素,如果顺序错误就交换位置。我们重复地执行这个过程,直到排序完成。示例代码如下: void BubbleSort(int…

    算法与数据结构 2023年5月19日
    00
  • Java编程实现汉字按字母顺序排序的方法示例

    下面是关于”Java编程实现汉字按字母顺序排序的方法示例”的详细攻略,包含以下步骤: 一、理解题意及需求 题目要求实现汉字按字母顺序排序,我们需要用到汉字拼音转换工具包,如pinyin4j。同时,我们已知的数据是一个汉字数组,需要对这些汉字进行排序并输出结果。因此,我们需要进行以下步骤: 导入pinyin4j包 对汉字进行拼音转换 对转换结果进行排序 输出结…

    算法与数据结构 2023年5月19日
    00
  • TypeScript十大排序算法插入排序实现示例详解

    针对“TypeScript十大排序算法插入排序实现示例详解”的完整攻略,我有如下的描述和示例: 1. 算法简介 插入排序(Insertion Sort)是一种简单直观的排序算法。它的基本思想是将目标数组分为已排序和未排序区间,每次从未排序区间中选取一个元素并插入到已排序区间中正确的位置。 插入排序是一种相对基础的排序算法,不仅实现起来比较简单,而且时间复杂度…

    算法与数据结构 2023年5月19日
    00
  • C++实现堆排序示例

    下面就详细讲解一下“C++实现堆排序示例”的完整攻略。 什么是堆排序 堆排序是一种树形选择排序方法,它是通过将待排序的序列构建成一个堆,在堆中,全局最大或最小的元素总是位于根节点,根节点最大或最小的元素会被输出到一个新的序列中,再将剩余的元素重新构建成堆进行下一轮循环,直到所有元素均被输出为止。 实现步骤 堆排序主要有两个步骤:构建堆和调整堆。 构建堆 将待…

    算法与数据结构 2023年5月19日
    00
  • C语言实现排序算法之归并排序详解

    C语言实现排序算法之归并排序详解 概述 归并排序是一种分治算法,在处理大规模数据排序时具有较高的效率。该算法将要排序的数组分为两部分,对每个部分内部进行排序,然后将排好序的两部分合并成一个有序数组。该算法在实现时需要借助递归和迭代两种方式。 步骤 归并排序可递归或迭代实现。以下是递归实现的步骤: 分解:将待排序数组分为两个等长的子数组,分别为左半部分和右半部…

    算法与数据结构 2023年5月19日
    00
  • 必须知道的C语言八大排序算法(收藏)

    必须知道的C语言八大排序算法(收藏) 简介 排序算法(sorting algorithms)是计算机程序设计中处理数据的重要技术之一,常见于数据处理程序中。其功能是按照指定的方式将所输入的数据进行排序。排序算法分为内部排序和外部排序,本文主要讲解C语言中的八大内部排序算法。 八大排序算法 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 计…

    算法与数据结构 2023年5月19日
    00
  • JS实现的全排列组合算法示例

    下面针对 “JS实现的全排列组合算法示例” 给出完整攻略。 什么是全排列组合算法? 全排列组合是指将一个集合中的元素排成一列,可以有不同的排列方式,这些不同的排列方式就称为全排列。当从这个集合中取出一部分排成一列时,称为排列,而取出一部分组合称为组合。 JS实现全排列组合算法的步骤 具体实现全排列组合算法的步骤如下: 定义需要排列和组合的数组或字符串; 定义…

    算法与数据结构 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部