冒泡排序的简单进阶

排序的定义:将数组中的数据按照一定规则顺序排列

冒泡排序:重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 


这种方法是最简单的方法,相对的效率就很低;我们从空间复杂度、时间复杂度、稳定性分析
冒泡排序
时间复杂度(平均) 时间复杂度(最好)        时间复杂度(最坏) 空间复杂度     稳定性    

稳定如果a原本在b前面,而a=b,排序之后a仍然在b的前面。

不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。

时间复杂度对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。

空间复杂度:是指算法在计算机内执行时所需存储空间的度量,它也是数据规模n的函数。 


最简单的冒泡:

每个都遍历:

package cn.swu.stormliu.test;

public class bubble {
	public static void main(String[] args) {
		
	
	int a[]= {5,8,1,6,7,4,7,7,10,55,1,0,3};
	for(int i=0;i<a.length;i++) {
		for(int j=0;j<a.length-1;j++) {
			if(a[j]>a[j+1]) {
				int temp=a[j+1];
				a[j+1]=a[j];
				a[j]=temp;
			}
		}
	}
	for(int i:a) {
		System.out.println(i);
	}
}
}
下一个是将已经排过序的元素不动:
package cn.swu.stormliu.test;

public class bubble {
	public static void main(String[] args) {
		
	int a[]= {5,8,1,6,7,4,7,7,10,55,1,0,3};
	for(int i=0;i<a.length;i++) {
		for(int j=0;j<a.length-1-i;j++) {
			if(a[j]>a[j+1]) {
				int temp=a[j+1];
				a[j+1]=a[j];
				a[j]=temp;
			}
		}
	}
	for(int i:a) {
		System.out.println(i);
	}
}
}
这个是设置一个标志位,如果没有发生过元素的换位那么就结束循环,比如我现在数组里面是{8,1,2,3},我现在按照原来的方法,第一趟变成了{1,2,3,8},如果按照原来的方法,那么还是要继续运行程序。可是这个结果已经是我们想要的结果了,这个时候应该退出这个循环方法。所以就变成了
package cn.swu.stormliu.test;

public class bubble {
	public static void main(String[] args) {
		
	int a[]= {5,8,1,6,7,4,7,7,10,55,1,0,3};
	boolean sorted=true;
	for(int i=0;i<a.length;i++) {
		sorted=true;
		for(int j=0;j<a.length-1-i;j++) {
			if(a[j]>a[j+1]) {
				int temp=a[j+1];
				a[j+1]=a[j];
				a[j]=temp;
				sorted=false;
			}
			
		}
		if(sorted) {
			break;
		}
		
	}
	for(int i:a) {
		System.out.println(i);
	}
}
}

按照这个方法 上面的{8,1,2,3,}只需要一趟即可完成,简化了步骤





猜你喜欢

转载自blog.csdn.net/qq_35583772/article/details/80399835