欢迎访问宙启技术站
智能推送

Java中的冒泡排序函数实现方法有哪些?

发布时间:2023-06-21 21:55:13

在Java中,冒泡排序是一种简单的排序算法,在排序方面起着重要的作用。冒泡排序函数的实现方法有多种,下面分别介绍以下四种常见的实现方式。

1. 基本的冒泡排序

基本的冒泡排序是在一个数组中,依次比较相邻的元素大小,如果前面的元素大于后面的元素,则交换它们的值。代码如下:

public void bubbleSort(int[] arr) {
    int temp;
    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]) {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

2. 冒泡排序优化一

在基本的冒泡排序中,即使已经排好序,每一轮虽然都会从头到尾遍历整个数组。为了提高冒泡排序的效率,可以在每轮遍历中添加一个标志位,如果没有发生交换,说明已经排好序了,可以直接退出循环。代码如下:

public void bubbleSort(int[] arr) {
    int temp;
    boolean flag; // 标志位,记录是否交换
    for (int i = 0; i < arr.length - 1; i++) {
        flag = false; // 每轮开始,flag重置为false
        for (int j = 0; j < arr.length - 1 - i; j++) {
            if (arr[j] > arr[j + 1]) {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
                flag = true; // 如果有交换,flag置为true
            }
        }
        if (!flag) break; // 如果没有交换,说明已排好序,退出循环
    }
}

3. 冒泡排序优化二

在经过 轮遍历之后,最后一次交换的位置必然是最后一对逆序元素。因此,在进行下一轮遍历时,只需对“未排序列”中的元素进行排序即可,而“已排序列”中不用再进行排序了。代码如下:

public void bubbleSort(int[] arr) {
    int temp;
    boolean flag;
    int k = arr.length - 1; // k记录最后一次交换的位置
    for (int i = 0; i < arr.length - 1; i++) {
        flag = false;
        for (int j = 0; j < k; j++) { // 只需对“未排序列”中的元素进行排序
            if (arr[j] > arr[j + 1]) {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
                flag = true;
                k = j; // 记录最后一次交换的位置
            }
        }
        if (!flag) break;
    }
}

4. 冒泡排序优化三

最后一种优化方法是鸡尾酒排序,也叫定向冒泡排序。它是对基本冒泡排序的改进,在正向遍历之后,再进行反向遍历,每次正反遍历都只需要对“未排序列”中的元素进行排序。代码如下:

public void cocktailSort(int[] arr) {
    int temp;
    boolean flag;
    int left = 0, right = arr.length - 1;
    while (left < right) {
        flag = false;
        for (int i = left; i < right; i++) {
            if (arr[i] > arr[i + 1]) {
                temp = arr[i];
                arr[i] = arr[i + 1];
                arr[i + 1] = temp;
                flag = true;
            }
        }
        if (!flag) break;
        right--;
        flag = false;
        for (int i = right; i > left; i--) {
            if (arr[i] < arr[i - 1]) {
                temp = arr[i];
                arr[i] = arr[i - 1];
                arr[i - 1] = temp;
                flag = true;
            }
        }
        if (!flag) break;
        left++;
    }
}

总之,以上是Java中常见的四种冒泡排序函数实现方法。在实际开发中,根据不同的需求选择不同的算法和优化方法,提高排序的效率。