排序算法(冒泡排序)

一、基本思路

冒泡排序的思路比较简单,为什么叫冒泡呢?它的思路就是从第一个开始,和第二个元素比较,如果比后面的元素大,则交换顺序,接着第二个和第三个比较,这样,一趟下来,数组中最大的元素就会像泡泡一样“冒”到最后的位置,第二趟,第二大的元素将会“冒”到倒数第二个位置,由此,只要经过n-1趟,数组就完成了排序。

二、例子

我们以{3,5,7,9,8,6,2,1,4,0}数组的排序为例子

第一趟:冒泡区间1~9

3 5 7 9 8 6 2 1 4 0
3 5 7 8 9 6 2 1 4 0
3 5 7 8 6 9 2 1 4 0
......

3 5 7 8 6 2 1 4 0 9

这一趟,9出类拔萃,跃居第一名

第二趟:冒泡区间1~8

3 5 7 8 6 2 1 4 0 9
3 5 7 6 8 2 1 4 0 9

.....

3 5 7 6 2 1 4 0 8 9

.这一趟,我们可以看到,8排到了第二名

.......

由此可见经过9趟冒泡后,数组的每个元素会在它该在的名次(位置)上,这样我们也就完成了对该数组的冒泡排序

三、代码实现

public class BubbleSort {
	public void bubbleSort(int [] data){
		int count=0;
		int f=0;
		for(int i=0;i<data.length;i++){
			for(int j=0;j<data.length-i-1;j++){ 
				if(data[j]>data[j+1]){
					int temp=data[j];
					data[j]=data[j+1];
					data[j+1]=temp;
					count++;
					f=1;
				}
			}
			if(f==0)
				break;
			f=0;
		}
		System.out.println("交换次数:"+count);
	}
	public static void main(String[] args) {
		int [] a=new int[]{3,5,7,9,8,6,2,1,4,0};
		BubbleSort bubbleSort=new BubbleSort();
		bubbleSort.bubbleSort(a);
		for(int item:a){
			System.out.print(item+" ");
		}
	}

}

四、复杂度

最差和平均情况的复杂度都是O(n²),最好的情况是O(n)
为什么最好的情况是O(n)?因为在第一遍冒泡的时候发现没有交换,直接中断退出冒泡排序,
所以只做了n-1次j++,次数为T(n-1),所以时间复杂度为O(n)




猜你喜欢

转载自blog.csdn.net/andy_budd/article/details/81056761