【详解】冒泡排序<java实现>

1、概述

    冒泡排序的核心思想:

       从头开始让相邻的两个元素进行比较,符合条件就交换位置,条件可以是从小到大排序,或者从大到小排序。这样就把最大值或者是最小值放到了序列的最后一个位置了;接着再从头开始两两比较,直到整个序列都是有序的。  

注意:

       ① 比较过程是序列中相邻元素进行比较,最大或者最小的元素放在后面。

       ② 假如比较好的序列是从小到大排序,那么第一趟比较后的最大的元素在序列的最后一个,第二趟比较的时候就不需要再比较最后一个元素;所以第二次比较的话,比较的次数 -1,代码中是-i。

       ③ 循环条件:两个for循环,第一个for循环是比较的趟数,第二个for循环是每趟比较的次数。

       ④ 第二个for循环的arr.length - 1是为了防止数组的越界,arr.length - 1- i中的-i是每次比较最大的都放在了后面的位置,后面的位置已经有序了,不需要比较,-i是减掉后面的位置

比较流程图:

2、代码实现:

import java.util.Arrays;

public class Bubble {
	
	public static void main(String[] args) {
		int[] array = {2,5,1,7,3,9,5,10};
		int[] arr1 = bubbling(array);
		System.out.println(Arrays.toString(arr1));
	}
	public static int[] bubbling(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;
				}
			}
		}
		return arr;
	}
}

3、算法复杂度分析

      很明显,两次for循环,时间复杂度是O(n2);

猜你喜欢

转载自blog.csdn.net/Sunshineoe/article/details/114777303