本文共 2345 字,大约阅读时间需要 7 分钟。
算法思路:从第一个元素开始,依次比较相邻的两个元素,如果前面的元素大于后面的元素,则交换他们的次序,一趟下来最大的元素的位置就确定了,依次类推,第二趟的时候就确定了第二大元素的位置,进行n-1躺就能确定所有元素的位置。
性能分析:
空间复杂度O(1)
时间复杂度最好O(n),最坏、平均O(n^2)
稳定性: 算法稳定
public static void bubbleSort(int[] arrays) { for (int i = arrays.length - 1; i > 0; i--) { boolean flag = false; for (int j = 0; j < i; j++) { if (arrays[j] > arrays[j+1]){ int temp = arrays[j]; arrays[j] = arrays[j+1]; arrays[j+1] = temp; flag = true; } } if (!flag) //如果某一趟冒泡没有发生交换,则表示序列已经有序 break; } }
private static void bubbleSort(int[] arrays) { for (int i = 0; i < arrays.length; i++) { for (int i1 = 0; i1 < arrays.length - 1 - i; i1++) { if (arrays[i1] > arrays[i1 + 1]) { arrays[i1] ^= arrays[i1 + 1]; arrays[i1 + 1] ^= arrays[i1]; arrays[i1] ^= arrays[i1 + 1]; } } } }
完整代码:
package sort;import java.util.Arrays;import java.util.Scanner;/** * 冒泡排序 */public class BigData02 { public static void main(String[] args) { int[] arrays = input(); bubbleSort(arrays); print(arrays); } /** * 打印数组 * @param arrays */ private static void print(int[] arrays) { System.out.print("升序后的数组为: "); System.out.println(Arrays.toString(arrays)); } /** * 冒泡排序核心功能 * @param arrays */ public static void bubbleSort(int[] arrays) { for (int i = arrays.length - 1; i > 0; i--) { boolean flag = false; for (int j = 0; j < i; j++) { if (arrays[j] > arrays[j+1]){ int temp = arrays[j]; arrays[j] = arrays[j+1]; arrays[j+1] = temp; flag = true; } } if (!flag) //如果某一趟冒泡没有发生交换,则表示序列已经有序 break; } } /** * 输入多个值 * @return */ public static int[] input() { Scanner scanner = new Scanner(System.in); System.out.print("请依次输入6个数: "); int[] arrays = new int[6]; for (int i = 0; i < arrays.length; i++) { arrays[i] = scanner.nextInt(); } return arrays; }}
转载地址:http://lpczb.baihongyu.com/