**Java中实现冒泡排序算法的代码详解**
在编程中,排序算法是一种常见且重要的算法,冒泡排序(Bubble Sort)是其中最简单直观的一种排序算法,它的工作原理是重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来,走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
下面是一个使用Java语言实现的冒泡排序算法的代码示例:
public class BubbleSort { // 冒泡排序函数 public static 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 temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } // 测试冒泡排序函数 public static void main(String[] args) { int[] arr = {64, 34, 25, 12, 22, 11, 90}; System.out.println("排序前的数组:"); printArray(arr); bubbleSort(arr); System.out.println("\n排序后的数组:"); printArray(arr); } // 辅助函数,用于打印数组 public static void printArray(int[] arr) { int n = arr.length; for (int i = 0; i < n; ++i) System.out.print(arr[i] + " "); System.out.println(); } }
代码解释:
1. `bubbleSort` 方法是冒泡排序的核心实现部分,它接收一个整数数组 `arr` 作为参数,并对其进行排序。
2. 外层循环 `for (int i = 0; i < n - 1; i++)` 控制排序的趟数,由于每一趟排序都会将当前未排序部分的最大值“冒泡”到已排序部分的末尾,所以总共需要 `n-1` 趟排序(`n` 是数组的长度)。
3. 内层循环 `for (int j = 0; j < n - i - 1; j++)` 控制每一趟排序需要比较的次数,由于每一趟排序都会将一个最大值“冒泡”到末尾,所以下一趟排序时就不需要再比较这个最大值了,因此内层循环的边界是 `n-i-1`。
4. 在内层循环中,通过比较相邻的两个元素 `arr[j]` 和 `arr[j + 1]` 的大小,如果 `arr[j]` 大于 `arr[j + 1]`,则交换它们的位置。
5. `main` 方法是程序的入口点,它首先定义了一个待排序的数组 `arr`,并调用 `printArray` 方法打印出排序前的数组,然后调用 `bubbleSort` 方法对数组进行排序,最后再次调用 `printArray` 方法打印出排序后的数组。
6. `printArray` 方法是一个辅助方法,用于打印整数数组的内容,它接收一个整数数组作为参数,并使用一个循环遍历数组中的每个元素,将它们打印到控制台上。
冒泡排序的时间复杂度是 O(n^2),其中 n 是待排序数组的长度,虽然冒泡排序的时间复杂度较高,但由于其实现简单直观,因此在一些对时间复杂度要求不高的场合仍然被广泛使用。