用Java玩转算法(1)---冒泡排序

      简介:  冒泡排序(Bubble Sort)是最为直观和易懂的排序算法之一,它的思想是前后比较,若前者大于后者就把前者和后者交换位置,就像一个重量大的泡泡一样,慢慢地浮至其他轻的泡泡之下。

    Java代码:

public class BubbleSort {
	public static void main(String[] args) {
	int[] array = {7,5,3,8,4,1};
	System.out.println("冒泡排序前:");
	for(int arr:array){
		System.out.print(arr+" ");
	}
	
	//冒泡排序
	for(int i = 1; i < array.length;i ++){
		//第一次循环,i=1,j作为下标从0开始
		//循环比较(数组长度-1)次,即可全部比较完
		for(int j = 0; j < array.length - i;j ++){
			if(array[j] > array[j + 1]){
				//前者比后者大,交换位置
				int temp = array[j + 1];
				array[j + 1] = array[j];
				array[j] = temp;
			}
		}
	}
		//输出冒泡排序的结果
			System.out.println("冒泡排序的结果为:");
			for(int arr:array){
				System.out.print(arr+" ");
			}
}	
}

结果:

    

动画演示:

    https://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html

思考:

    1、第一轮for循环的作用是标识这是第几个要进行冒泡排序的数,如i=0时,表示这是对数组的第一个数进行冒泡排序,假如数组有5个数,就要进行4次冒泡排序,因为最后一个数无需排序,它一定是最小的了。

    2、第二轮for循环的作用是定义比较的次数是多少次,如一个数组有5个数,那么在对以一个数进行冒泡排序时,需要比较(5-1)= 4次,第二个数进行比较时,需要比较3次。

    3、若前者小于后者,并不是结束循环,而是用后者去和接下来的数比较。如数组3 2 4 1,3比较到4的时候,判断3小于4,所以不能进到if中,即把索引往下移给4,用4和接下来的数进行比较,这样的作用是一轮下来,一定能筛选出大数将其排序到后面。

    4、冒泡排序是有缺点的:假如数组有n个元素,那么第一轮需要进行n-1次比较,第二轮需要n-2次比较,所以n-1轮后共比较

(n-1)+(n-2)+...+1 ~= n^2/2次,即算法的时间复杂度0与n^2成正比,所以大O表示法表示为O(n^2),是时间复杂度很大的一种排序算法。

猜你喜欢

转载自blog.csdn.net/pbrlovejava/article/details/80794006
今日推荐