kuangshenshuo-数组-冒泡排序及详解

tech2022-08-17  146

冒泡排序详解及优化

1. 思路:

比较数组中,两个相邻的元素,如果第一个比第二个大,交换位置;每次比较,会产生出一个最大,或者最小的数;下一轮则可少一次排序;依次循环,直到结束。

2. 图解分析:

以数组int[] arr = {6, 3, 5, 7, 0}为例,图解分析如图所示:

总结图解分析。外层共循环了arrr.length-1次,外层循环增加一次,对应内层循环就减少一次。

时间复杂度=O(n2);空间复杂度=O(1), 是一种稳定的排序算法。

3. 代码实现:

import java.util.Arrays; import java.util.Scanner; public class Test { public static void main(String[] args) { //利用Scanner输入数组 Scanner scanner = new Scanner(System.in); int[] a = new int[10]; for(int i = 0; i < a.length; i++){ a[i] = scanner.nextInt(); } BubbleSort(a); System.out.println(Arrays.toString(a)); scanner.close(); } //m冒泡排序 public static void BubbleSort(int[] arr){ //临时变量 int t; //外层循环,判断要走多少次 for(int i = 0; i < arr.length-1; i++){ //内层循环,从头一直到已经确定的位置前,两两比较 for(int j = 0; j < arr.length-i-1; j++){ //如果第一个数比第二个大,交换位置 if(arr[j] > arr[j+1]){ t = arr[j]; arr[j] = arr[j+1]; arr[j+1] = t; } } } } }

4. 冒泡排序优化

public static void BubbleSort(int[] arr){ int t; for(int i = 0; i < arr.length-1; i++){ boolean flag = false; for(int j = 0; j < arr.length-i-1; j++){ if(arr[j] > arr[j+1]){ t = arr[j]; arr[j] = arr[j+1]; arr[j+1] = t; flag = true; } } if(flag == false){ break; } } }
最新回复(0)